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
4774cf7a
Commit
4774cf7a
authored
May 02, 2004
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge intel.com:/home/lenb/bk/linux-2.6.6
into intel.com:/home/lenb/src/linux-acpi-test-2.6.6
parents
9f7a3b76
357f6536
Changes
34
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
490 additions
and
343 deletions
+490
-343
Documentation/kernel-parameters.txt
Documentation/kernel-parameters.txt
+10
-4
arch/i386/kernel/acpi/boot.c
arch/i386/kernel/acpi/boot.c
+16
-3
arch/i386/kernel/dmi_scan.c
arch/i386/kernel/dmi_scan.c
+74
-73
arch/i386/kernel/io_apic.c
arch/i386/kernel/io_apic.c
+7
-11
arch/i386/kernel/mpparse.c
arch/i386/kernel/mpparse.c
+16
-24
arch/i386/kernel/setup.c
arch/i386/kernel/setup.c
+11
-2
arch/i386/mach-default/setup.c
arch/i386/mach-default/setup.c
+3
-1
arch/i386/mach-es7000/setup.c
arch/i386/mach-es7000/setup.c
+4
-3
arch/i386/mach-voyager/setup.c
arch/i386/mach-voyager/setup.c
+3
-1
arch/i386/pci/acpi.c
arch/i386/pci/acpi.c
+0
-1
arch/i386/pci/irq.c
arch/i386/pci/irq.c
+1
-4
arch/x86_64/kernel/Makefile
arch/x86_64/kernel/Makefile
+1
-1
arch/x86_64/kernel/i8259.c
arch/x86_64/kernel/i8259.c
+3
-1
arch/x86_64/kernel/io_apic.c
arch/x86_64/kernel/io_apic.c
+6
-10
arch/x86_64/kernel/mpparse.c
arch/x86_64/kernel/mpparse.c
+15
-22
arch/x86_64/kernel/setup.c
arch/x86_64/kernel/setup.c
+6
-4
drivers/acpi/ac.c
drivers/acpi/ac.c
+3
-0
drivers/acpi/asus_acpi.c
drivers/acpi/asus_acpi.c
+68
-53
drivers/acpi/battery.c
drivers/acpi/battery.c
+12
-3
drivers/acpi/button.c
drivers/acpi/button.c
+36
-1
drivers/acpi/fan.c
drivers/acpi/fan.c
+3
-0
drivers/acpi/osl.c
drivers/acpi/osl.c
+12
-15
drivers/acpi/pci_irq.c
drivers/acpi/pci_irq.c
+1
-1
drivers/acpi/pci_link.c
drivers/acpi/pci_link.c
+103
-96
drivers/acpi/pci_root.c
drivers/acpi/pci_root.c
+9
-1
drivers/acpi/processor.c
drivers/acpi/processor.c
+12
-0
drivers/acpi/scan.c
drivers/acpi/scan.c
+8
-3
drivers/acpi/thermal.c
drivers/acpi/thermal.c
+7
-0
drivers/acpi/toshiba_acpi.c
drivers/acpi/toshiba_acpi.c
+5
-0
include/acpi/acpiosxf.h
include/acpi/acpiosxf.h
+3
-3
include/asm-i386/acpi.h
include/asm-i386/acpi.h
+15
-1
include/asm-ia64/acpi.h
include/asm-ia64/acpi.h
+1
-0
include/asm-x86_64/acpi.h
include/asm-x86_64/acpi.h
+15
-1
include/linux/acpi.h
include/linux/acpi.h
+1
-0
No files found.
Documentation/kernel-parameters.txt
View file @
4774cf7a
...
@@ -102,13 +102,14 @@ running once the system is up.
...
@@ -102,13 +102,14 @@ running once the system is up.
acpi= [HW,ACPI] Advanced Configuration and Power Interface
acpi= [HW,ACPI] Advanced Configuration and Power Interface
Format: { force | off | ht | strict }
Format: { force | off | ht | strict }
force -- enables ACPI for systems with default off
force -- enable ACPI if default was off
off -- disabled ACPI for systems with default on
off -- disable ACPI if default was on
noirq -- do not use ACPI for IRQ routing
ht -- run only enough ACPI to enable Hyper Threading
ht -- run only enough ACPI to enable Hyper Threading
strict -- Be less tolerant of platforms that are not
strict -- Be less tolerant of platforms that are not
strictly ACPI specification compliant.
strictly ACPI specification compliant.
See also Documentation/pm.txt
.
See also Documentation/pm.txt
, pci=noacpi
acpi_sleep= [HW,ACPI] Sleep options
acpi_sleep= [HW,ACPI] Sleep options
Format: { s3_bios, s3_mode }
Format: { s3_bios, s3_mode }
...
@@ -133,6 +134,10 @@ running once the system is up.
...
@@ -133,6 +134,10 @@ running once the system is up.
acpi_serialize [HW,ACPI] force serialization of AML methods
acpi_serialize [HW,ACPI] force serialization of AML methods
acpi_skip_timer_override [HW,ACPI]
Recognize and ignore IRQ0/pin2 Interrupt Override.
For broken nForce2 BIOS resulting in XT-PIC timer.
ad1816= [HW,OSS]
ad1816= [HW,OSS]
Format: <io>,<irq>,<dma>,<dma2>
Format: <io>,<irq>,<dma>,<dma2>
See also Documentation/sound/oss/AD1816.
See also Documentation/sound/oss/AD1816.
...
@@ -842,7 +847,8 @@ running once the system is up.
...
@@ -842,7 +847,8 @@ running once the system is up.
and Omnibook XE3 notebooks. This will
and Omnibook XE3 notebooks. This will
have no effect if ACPI IRQ routing is
have no effect if ACPI IRQ routing is
enabled.
enabled.
noacpi [IA-32] Do not use ACPI for IRQ routing.
noacpi [IA-32] Do not use ACPI for IRQ routing
or for PCI scanning.
pcmv= [HW,PCMCIA] BadgePAD 4
pcmv= [HW,PCMCIA] BadgePAD 4
...
...
arch/i386/kernel/acpi/boot.c
View file @
4774cf7a
...
@@ -53,7 +53,13 @@ static inline int ioapic_setup_disabled(void) { return 0; }
...
@@ -53,7 +53,13 @@ static inline int ioapic_setup_disabled(void) { return 0; }
#define PREFIX "ACPI: "
#define PREFIX "ACPI: "
#ifdef CONFIG_ACPI_PCI
int
acpi_noirq
__initdata
;
/* skip ACPI IRQ initialization */
int
acpi_noirq
__initdata
;
/* skip ACPI IRQ initialization */
int
acpi_pci_disabled
__initdata
;
/* skip ACPI PCI scan and IRQ initialization */
#else
int
acpi_noirq
__initdata
=
1
;
int
acpi_pci_disabled
__initdata
=
1
;
#endif
int
acpi_ht
__initdata
=
1
;
/* enable HT */
int
acpi_ht
__initdata
=
1
;
/* enable HT */
int
acpi_lapic
;
int
acpi_lapic
;
...
@@ -62,6 +68,7 @@ int acpi_strict;
...
@@ -62,6 +68,7 @@ int acpi_strict;
acpi_interrupt_flags
acpi_sci_flags
__initdata
;
acpi_interrupt_flags
acpi_sci_flags
__initdata
;
int
acpi_sci_override_gsi
__initdata
;
int
acpi_sci_override_gsi
__initdata
;
int
acpi_skip_timer_override
__initdata
;
#ifdef CONFIG_X86_LOCAL_APIC
#ifdef CONFIG_X86_LOCAL_APIC
static
u64
acpi_lapic_addr
__initdata
=
APIC_DEFAULT_PHYS_BASE
;
static
u64
acpi_lapic_addr
__initdata
=
APIC_DEFAULT_PHYS_BASE
;
...
@@ -329,6 +336,12 @@ acpi_parse_int_src_ovr (
...
@@ -329,6 +336,12 @@ acpi_parse_int_src_ovr (
return
0
;
return
0
;
}
}
if
(
acpi_skip_timer_override
&&
intsrc
->
bus_irq
==
0
&&
intsrc
->
global_irq
==
2
)
{
printk
(
PREFIX
"BIOS IRQ0 pin2 override ignored.
\n
"
);
return
0
;
}
mp_override_legacy_irq
(
mp_override_legacy_irq
(
intsrc
->
bus_irq
,
intsrc
->
bus_irq
,
intsrc
->
flags
.
polarity
,
intsrc
->
flags
.
polarity
,
...
@@ -653,9 +666,6 @@ acpi_parse_madt_ioapic_entries(void)
...
@@ -653,9 +666,6 @@ acpi_parse_madt_ioapic_entries(void)
return
count
;
return
count
;
}
}
/* Build a default routing table for legacy (ISA) interrupts. */
mp_config_acpi_legacy_irqs
();
count
=
acpi_table_parse_madt
(
ACPI_MADT_INT_SRC_OVR
,
acpi_parse_int_src_ovr
,
NR_IRQ_VECTORS
);
count
=
acpi_table_parse_madt
(
ACPI_MADT_INT_SRC_OVR
,
acpi_parse_int_src_ovr
,
NR_IRQ_VECTORS
);
if
(
count
<
0
)
{
if
(
count
<
0
)
{
printk
(
KERN_ERR
PREFIX
"Error parsing interrupt source overrides entry
\n
"
);
printk
(
KERN_ERR
PREFIX
"Error parsing interrupt source overrides entry
\n
"
);
...
@@ -670,6 +680,9 @@ acpi_parse_madt_ioapic_entries(void)
...
@@ -670,6 +680,9 @@ acpi_parse_madt_ioapic_entries(void)
if
(
!
acpi_sci_override_gsi
)
if
(
!
acpi_sci_override_gsi
)
acpi_sci_ioapic_setup
(
acpi_fadt
.
sci_int
,
0
,
0
);
acpi_sci_ioapic_setup
(
acpi_fadt
.
sci_int
,
0
,
0
);
/* Fill in identity legacy mapings where no override */
mp_config_acpi_legacy_irqs
();
count
=
acpi_table_parse_madt
(
ACPI_MADT_NMI_SRC
,
acpi_parse_nmi_src
,
NR_IRQ_VECTORS
);
count
=
acpi_table_parse_madt
(
ACPI_MADT_NMI_SRC
,
acpi_parse_nmi_src
,
NR_IRQ_VECTORS
);
if
(
count
<
0
)
{
if
(
count
<
0
)
{
printk
(
KERN_ERR
PREFIX
"Error parsing NMI SRC entry
\n
"
);
printk
(
KERN_ERR
PREFIX
"Error parsing NMI SRC entry
\n
"
);
...
...
arch/i386/kernel/dmi_scan.c
View file @
4774cf7a
...
@@ -412,30 +412,6 @@ static __init int swab_apm_power_in_minutes(struct dmi_blacklist *d)
...
@@ -412,30 +412,6 @@ static __init int swab_apm_power_in_minutes(struct dmi_blacklist *d)
return
0
;
return
0
;
}
}
/*
* The Intel 440GX hall of shame.
*
* On many (all we have checked) of these boxes the $PIRQ table is wrong.
* The MP1.4 table is right however and so SMP kernels tend to work.
*/
static
__init
int
broken_pirq
(
struct
dmi_blacklist
*
d
)
{
printk
(
KERN_INFO
" *** Possibly defective BIOS detected (irqtable)
\n
"
);
printk
(
KERN_INFO
" *** Many BIOSes matching this signature have incorrect IRQ routing tables.
\n
"
);
printk
(
KERN_INFO
" *** If you see IRQ problems, in particular SCSI resets and hangs at boot
\n
"
);
printk
(
KERN_INFO
" *** contact your hardware vendor and ask about updates.
\n
"
);
printk
(
KERN_INFO
" *** Building an SMP kernel may evade the bug some of the time.
\n
"
);
#ifdef CONFIG_X86_IO_APIC
{
extern
int
skip_ioapic_setup
;
skip_ioapic_setup
=
0
;
}
#endif
return
0
;
}
/*
/*
* ASUS K7V-RM has broken ACPI table defining sleep modes
* ASUS K7V-RM has broken ACPI table defining sleep modes
*/
*/
...
@@ -552,15 +528,35 @@ static __init __attribute__((unused)) int force_acpi_ht(struct dmi_blacklist *d)
...
@@ -552,15 +528,35 @@ static __init __attribute__((unused)) int force_acpi_ht(struct dmi_blacklist *d)
}
}
return
0
;
return
0
;
}
}
/*
* early nForce2 reference BIOS shipped with a
* bogus ACPI IRQ0 -> pin2 interrupt override -- ignore it
*/
static
__init
int
ignore_timer_override
(
struct
dmi_blacklist
*
d
)
{
extern
int
acpi_skip_timer_override
;
printk
(
KERN_NOTICE
"%s detected: BIOS IRQ0 pin2 override"
" will be ignored
\n
"
,
d
->
ident
);
acpi_skip_timer_override
=
1
;
return
0
;
}
#endif
#endif
#ifdef CONFIG_ACPI_PCI
#ifdef CONFIG_ACPI_PCI
static
__init
int
disable_acpi_irq
(
struct
dmi_blacklist
*
d
)
{
printk
(
KERN_NOTICE
"%s detected: force use of acpi=noirq
\n
"
,
d
->
ident
);
acpi_noirq_set
();
return
0
;
}
static
__init
int
disable_acpi_pci
(
struct
dmi_blacklist
*
d
)
static
__init
int
disable_acpi_pci
(
struct
dmi_blacklist
*
d
)
{
{
printk
(
KERN_NOTICE
"%s detected: force use of pci=noacpi
\n
"
,
d
->
ident
);
printk
(
KERN_NOTICE
"%s detected: force use of pci=noacpi
\n
"
,
d
->
ident
);
acpi_
noirq_set
();
acpi_
disable_pci
();
return
0
;
return
0
;
}
}
#endif
#endif
/*
/*
...
@@ -815,52 +811,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
...
@@ -815,52 +811,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
NO_MATCH
,
NO_MATCH
NO_MATCH
,
NO_MATCH
}
},
}
},
/* Problem Intel 440GX bioses */
{
broken_pirq
,
"SABR1 Bios"
,
{
/* Bad $PIR */
MATCH
(
DMI_BIOS_VENDOR
,
"Intel Corporation"
),
MATCH
(
DMI_BIOS_VERSION
,
"SABR1"
),
NO_MATCH
,
NO_MATCH
}
},
{
broken_pirq
,
"l44GX Bios"
,
{
/* Bad $PIR */
MATCH
(
DMI_BIOS_VENDOR
,
"Intel Corporation"
),
MATCH
(
DMI_BIOS_VERSION
,
"L440GX0.86B.0094.P10"
),
NO_MATCH
,
NO_MATCH
}
},
{
broken_pirq
,
"l44GX Bios"
,
{
/* Bad $PIR */
MATCH
(
DMI_BIOS_VENDOR
,
"Intel Corporation"
),
MATCH
(
DMI_BIOS_VERSION
,
"L440GX0.86B.0115.P12"
),
NO_MATCH
,
NO_MATCH
}
},
{
broken_pirq
,
"l44GX Bios"
,
{
/* Bad $PIR */
MATCH
(
DMI_BIOS_VENDOR
,
"Intel Corporation"
),
MATCH
(
DMI_BIOS_VERSION
,
"L440GX0.86B.0120.P12"
),
NO_MATCH
,
NO_MATCH
}
},
{
broken_pirq
,
"l44GX Bios"
,
{
/* Bad $PIR */
MATCH
(
DMI_BIOS_VENDOR
,
"Intel Corporation"
),
MATCH
(
DMI_BIOS_VERSION
,
"L440GX0.86B.0125.P13"
),
NO_MATCH
,
NO_MATCH
}
},
{
broken_pirq
,
"l44GX Bios"
,
{
/* Bad $PIR */
MATCH
(
DMI_BIOS_VENDOR
,
"Intel Corporation"
),
MATCH
(
DMI_BIOS_VERSION
,
"L440GX0.86B.0066.P07.9906041405"
),
NO_MATCH
,
NO_MATCH
}
},
{
broken_pirq
,
"IBM xseries 370"
,
{
/* Bad $PIR */
MATCH
(
DMI_BIOS_VENDOR
,
"IBM"
),
MATCH
(
DMI_BIOS_VERSION
,
"MMKT33AUS"
),
NO_MATCH
,
NO_MATCH
}
},
/* Intel in disguise - In this case they can't hide and they don't run
too well either... */
{
broken_pirq
,
"Dell PowerEdge 8450"
,
{
/* Bad $PIR */
MATCH
(
DMI_PRODUCT_NAME
,
"Dell PowerEdge 8450"
),
NO_MATCH
,
NO_MATCH
,
NO_MATCH
}
},
{
broken_acpi_Sx
,
"ASUS K7V-RM"
,
{
/* Bad ACPI Sx table */
{
broken_acpi_Sx
,
"ASUS K7V-RM"
,
{
/* Bad ACPI Sx table */
MATCH
(
DMI_BIOS_VERSION
,
"ASUS K7V-RM ACPI BIOS Revision 1003A"
),
MATCH
(
DMI_BIOS_VERSION
,
"ASUS K7V-RM ACPI BIOS Revision 1003A"
),
MATCH
(
DMI_BOARD_NAME
,
"<K7V-RM>"
),
MATCH
(
DMI_BOARD_NAME
,
"<K7V-RM>"
),
...
@@ -1018,6 +968,49 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
...
@@ -1018,6 +968,49 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH
(
DMI_BOARD_VENDOR
,
"IBM"
),
MATCH
(
DMI_BOARD_VENDOR
,
"IBM"
),
MATCH
(
DMI_PRODUCT_NAME
,
"eserver xSeries 440"
),
MATCH
(
DMI_PRODUCT_NAME
,
"eserver xSeries 440"
),
NO_MATCH
,
NO_MATCH
}},
NO_MATCH
,
NO_MATCH
}},
/*
* Systems with nForce2 BIOS timer override bug
* nVidia claims all nForce have timer on pin0,
* and applying this workaround is a NOP on fixed BIOS,
* so prospects are good for replacing these entries
* with something to key of chipset PCI-ID.
*/
{
ignore_timer_override
,
"Abit NF7-S v2"
,
{
MATCH
(
DMI_BOARD_VENDOR
,
"http://www.abit.com.tw/"
),
MATCH
(
DMI_BOARD_NAME
,
"NF7-S/NF7,NF7-V (nVidia-nForce2)"
),
MATCH
(
DMI_BIOS_VERSION
,
"6.00 PG"
),
MATCH
(
DMI_BIOS_DATE
,
"03/24/2004"
)
}},
{
ignore_timer_override
,
"Asus A7N8X v2"
,
{
MATCH
(
DMI_BOARD_VENDOR
,
"ASUSTeK Computer INC."
),
MATCH
(
DMI_BOARD_NAME
,
"A7N8X2.0"
),
MATCH
(
DMI_BIOS_VERSION
,
"ASUS A7N8X2.0 Deluxe ACPI BIOS Rev 1007"
),
MATCH
(
DMI_BIOS_DATE
,
"10/06/2003"
)
}},
{
ignore_timer_override
,
"Asus A7N8X-X"
,
{
MATCH
(
DMI_BOARD_VENDOR
,
"ASUSTeK Computer INC."
),
MATCH
(
DMI_BOARD_NAME
,
"A7N8X-X"
),
MATCH
(
DMI_BIOS_VERSION
,
"ASUS A7N8X-X ACPI BIOS Rev 1009"
),
MATCH
(
DMI_BIOS_DATE
,
"2/3/2004"
)
}},
{
ignore_timer_override
,
"MSI K7N2-Delta"
,
{
MATCH
(
DMI_BOARD_VENDOR
,
"MICRO-STAR INTERNATIONAL CO., LTD"
),
MATCH
(
DMI_BOARD_NAME
,
"MS-6570"
),
MATCH
(
DMI_BIOS_VERSION
,
"6.00 PG"
),
MATCH
(
DMI_BIOS_DATE
,
"03/29/2004"
)
}},
{
ignore_timer_override
,
"Shuttle SN41G2"
,
{
MATCH
(
DMI_BOARD_VENDOR
,
"Shuttle Inc"
),
MATCH
(
DMI_BOARD_NAME
,
"FN41"
),
MATCH
(
DMI_BIOS_VERSION
,
"6.00 PG"
),
MATCH
(
DMI_BIOS_DATE
,
"01/14/2004"
)
}},
{
ignore_timer_override
,
"Shuttle AN35N"
,
{
MATCH
(
DMI_BOARD_VENDOR
,
"Shuttle Inc"
),
MATCH
(
DMI_BOARD_NAME
,
"AN35"
),
MATCH
(
DMI_BIOS_VERSION
,
"6.00 PG"
),
MATCH
(
DMI_BIOS_DATE
,
"12/05/2003"
)
}},
#endif // CONFIG_ACPI_BOOT
#endif // CONFIG_ACPI_BOOT
#ifdef CONFIG_ACPI_PCI
#ifdef CONFIG_ACPI_PCI
...
@@ -1025,13 +1018,21 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
...
@@ -1025,13 +1018,21 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
* Boxes that need ACPI PCI IRQ routing disabled
* Boxes that need ACPI PCI IRQ routing disabled
*/
*/
{
disable_acpi_
pci
,
"ASUS A7V"
,
{
{
disable_acpi_
irq
,
"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>"
),
/* newer BIOS, Revision 1011, does work */
/* newer BIOS, Revision 1011, does work */
MATCH
(
DMI_BIOS_VERSION
,
"ASUS A7V ACPI BIOS Revision 1007"
),
MATCH
(
DMI_BIOS_VERSION
,
"ASUS A7V ACPI BIOS Revision 1007"
),
NO_MATCH
}},
NO_MATCH
}},
/*
* Boxes that need ACPI PCI IRQ routing and PCI scan disabled
*/
{
disable_acpi_pci
,
"ASUS PR-DLS"
,
{
/* _BBN 0 bug */
MATCH
(
DMI_BOARD_VENDOR
,
"ASUSTeK Computer INC."
),
MATCH
(
DMI_BOARD_NAME
,
"PR-DLS"
),
MATCH
(
DMI_BIOS_VERSION
,
"ASUS PR-DLS ACPI BIOS Revision 1010"
),
MATCH
(
DMI_BIOS_DATE
,
"03/21/2003"
)
}},
#endif
#endif
{
NULL
,
}
{
NULL
,
}
...
...
arch/i386/kernel/io_apic.c
View file @
4774cf7a
...
@@ -2266,18 +2266,10 @@ static inline void check_timer(void)
...
@@ -2266,18 +2266,10 @@ static inline void check_timer(void)
/*
/*
*
*
* IRQ's that are handled by the
old PIC in all cases:
* IRQ's that are handled by the
PIC in the MPS IOAPIC case.
* - IRQ2 is the cascade IRQ, and cannot be a io-apic IRQ.
* - IRQ2 is the cascade IRQ, and cannot be a io-apic IRQ.
* Linux doesn't really care, as it's not actually used
* Linux doesn't really care, as it's not actually used
* for any interrupt handling anyway.
* for any interrupt handling anyway.
* - There used to be IRQ13 here as well, but all
* MPS-compliant must not use it for FPU coupling and we
* want to use exception 16 anyway. And there are
* systems who connect it to an I/O APIC for other uses.
* Thus we don't mark it special any longer.
*
* Additionally, something is definitely wrong with irq9
* on PIIX4 boards.
*/
*/
#define PIC_IRQS (1 << PIC_CASCADE_IR)
#define PIC_IRQS (1 << PIC_CASCADE_IR)
...
@@ -2285,7 +2277,11 @@ void __init setup_IO_APIC(void)
...
@@ -2285,7 +2277,11 @@ void __init setup_IO_APIC(void)
{
{
enable_IO_APIC
();
enable_IO_APIC
();
io_apic_irqs
=
~
PIC_IRQS
;
if
(
acpi_ioapic
)
io_apic_irqs
=
~
0
;
/* all IRQs go through IOAPIC */
else
io_apic_irqs
=
~
PIC_IRQS
;
printk
(
"ENABLING IO-APIC IRQs
\n
"
);
printk
(
"ENABLING IO-APIC IRQs
\n
"
);
/*
/*
...
@@ -2455,7 +2451,7 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
...
@@ -2455,7 +2451,7 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
entry
.
vector
=
assign_irq_vector
(
irq
);
entry
.
vector
=
assign_irq_vector
(
irq
);
printk
(
KERN_DEBUG
"IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> "
D
printk
(
KERN_DEBUG
"IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> "
"IRQ %d Mode:%i Active:%i)
\n
"
,
ioapic
,
"IRQ %d Mode:%i Active:%i)
\n
"
,
ioapic
,
mp_ioapics
[
ioapic
].
mpc_apicid
,
pin
,
entry
.
vector
,
irq
,
edge_level
,
active_high_low
);
mp_ioapics
[
ioapic
].
mpc_apicid
,
pin
,
entry
.
vector
,
irq
,
edge_level
,
active_high_low
);
...
...
arch/i386/kernel/mpparse.c
View file @
4774cf7a
...
@@ -929,8 +929,6 @@ void __init mp_override_legacy_irq (
...
@@ -929,8 +929,6 @@ void __init mp_override_legacy_irq (
u32
gsi
)
u32
gsi
)
{
{
struct
mpc_config_intsrc
intsrc
;
struct
mpc_config_intsrc
intsrc
;
int
i
=
0
;
int
found
=
0
;
int
ioapic
=
-
1
;
int
ioapic
=
-
1
;
int
pin
=
-
1
;
int
pin
=
-
1
;
...
@@ -963,23 +961,9 @@ void __init mp_override_legacy_irq (
...
@@ -963,23 +961,9 @@ void __init mp_override_legacy_irq (
(
intsrc
.
mpc_irqflag
>>
2
)
&
3
,
intsrc
.
mpc_srcbus
,
(
intsrc
.
mpc_irqflag
>>
2
)
&
3
,
intsrc
.
mpc_srcbus
,
intsrc
.
mpc_srcbusirq
,
intsrc
.
mpc_dstapic
,
intsrc
.
mpc_dstirq
);
intsrc
.
mpc_srcbusirq
,
intsrc
.
mpc_dstapic
,
intsrc
.
mpc_dstirq
);
/*
mp_irqs
[
mp_irq_entries
]
=
intsrc
;
* If an existing [IOAPIC.PIN -> IRQ] routing entry exists we override it.
if
(
++
mp_irq_entries
==
MAX_IRQ_SOURCES
)
* Otherwise create a new entry (e.g. gsi == 2).
panic
(
"Max # of irq sources exceeded!
\n
"
);
*/
for
(
i
=
0
;
i
<
mp_irq_entries
;
i
++
)
{
if
((
mp_irqs
[
i
].
mpc_srcbus
==
intsrc
.
mpc_srcbus
)
&&
(
mp_irqs
[
i
].
mpc_srcbusirq
==
intsrc
.
mpc_srcbusirq
))
{
mp_irqs
[
i
]
=
intsrc
;
found
=
1
;
break
;
}
}
if
(
!
found
)
{
mp_irqs
[
mp_irq_entries
]
=
intsrc
;
if
(
++
mp_irq_entries
==
MAX_IRQ_SOURCES
)
panic
(
"Max # of irq sources exceeded!
\n
"
);
}
return
;
return
;
}
}
...
@@ -1010,13 +994,20 @@ void __init mp_config_acpi_legacy_irqs (void)
...
@@ -1010,13 +994,20 @@ void __init mp_config_acpi_legacy_irqs (void)
intsrc
.
mpc_dstapic
=
mp_ioapics
[
ioapic
].
mpc_apicid
;
intsrc
.
mpc_dstapic
=
mp_ioapics
[
ioapic
].
mpc_apicid
;
/*
/*
* Use the default configuration for the IRQs 0-15.
These may be
* Use the default configuration for the IRQs 0-15.
Unless
* overriden by (MADT) interrupt source override entries.
* overriden by (MADT) interrupt source override entries.
*/
*/
for
(
i
=
0
;
i
<
16
;
i
++
)
{
for
(
i
=
0
;
i
<
16
;
i
++
)
{
int
idx
;
for
(
idx
=
0
;
idx
<
mp_irq_entries
;
idx
++
)
if
(
mp_irqs
[
idx
].
mpc_srcbus
==
MP_ISA_BUS
&&
(
mp_irqs
[
idx
].
mpc_srcbusirq
==
i
||
mp_irqs
[
idx
].
mpc_dstirq
==
i
))
break
;
if
(
i
==
2
)
if
(
i
dx
!=
mp_irq_entries
)
continue
;
/* Don't connect IRQ2
*/
continue
;
/* IRQ already used
*/
intsrc
.
mpc_irqtype
=
mp_INT
;
intsrc
.
mpc_irqtype
=
mp_INT
;
intsrc
.
mpc_srcbusirq
=
i
;
/* Identity mapped */
intsrc
.
mpc_srcbusirq
=
i
;
/* Identity mapped */
...
@@ -1111,11 +1102,12 @@ void __init mp_parse_prt (void)
...
@@ -1111,11 +1102,12 @@ void __init mp_parse_prt (void)
if
(
!
io_apic_set_pci_routing
(
ioapic
,
ioapic_pin
,
gsi
,
edge_level
,
active_high_low
))
{
if
(
!
io_apic_set_pci_routing
(
ioapic
,
ioapic_pin
,
gsi
,
edge_level
,
active_high_low
))
{
acpi_gsi_to_irq
(
gsi
,
&
entry
->
irq
);
acpi_gsi_to_irq
(
gsi
,
&
entry
->
irq
);
}
}
printk
(
KERN_DEBUG
"%02x:%02x:%02x[%c] -> %d-%d -> IRQ %d
\n
"
,
printk
(
KERN_DEBUG
"%02x:%02x:%02x[%c] -> %d-%d -> IRQ %d
%s %s
\n
"
,
entry
->
id
.
segment
,
entry
->
id
.
bus
,
entry
->
id
.
segment
,
entry
->
id
.
bus
,
entry
->
id
.
device
,
(
'A'
+
entry
->
pin
),
entry
->
id
.
device
,
(
'A'
+
entry
->
pin
),
mp_ioapic_routing
[
ioapic
].
apic_id
,
ioapic_pin
,
mp_ioapic_routing
[
ioapic
].
apic_id
,
ioapic_pin
,
entry
->
irq
);
entry
->
irq
,
edge_level
?
"level"
:
"edge"
,
active_high_low
?
"low"
:
"high"
);
}
}
print_IO_APIC
();
print_IO_APIC
();
...
...
arch/i386/kernel/setup.c
View file @
4774cf7a
...
@@ -583,9 +583,13 @@ static void __init parse_cmdline_early (char ** cmdline_p)
...
@@ -583,9 +583,13 @@ static void __init parse_cmdline_early (char ** cmdline_p)
disable_acpi
();
disable_acpi
();
acpi_ht
=
1
;
acpi_ht
=
1
;
}
}
/* "pci=noacpi" disable
s ACPI interrupt routing
*/
/* "pci=noacpi" disable
ACPI IRQ routing and PCI scan
*/
else
if
(
!
memcmp
(
from
,
"pci=noacpi"
,
10
))
{
else
if
(
!
memcmp
(
from
,
"pci=noacpi"
,
10
))
{
acpi_disable_pci
();
}
/* "acpi=noirq" disables ACPI interrupt routing */
else
if
(
!
memcmp
(
from
,
"acpi=noirq"
,
10
))
{
acpi_noirq_set
();
acpi_noirq_set
();
}
}
...
@@ -601,6 +605,11 @@ static void __init parse_cmdline_early (char ** cmdline_p)
...
@@ -601,6 +605,11 @@ static void __init parse_cmdline_early (char ** cmdline_p)
else
if
(
!
memcmp
(
from
,
"acpi_sci=low"
,
12
))
else
if
(
!
memcmp
(
from
,
"acpi_sci=low"
,
12
))
acpi_sci_flags
.
polarity
=
3
;
acpi_sci_flags
.
polarity
=
3
;
#ifdef CONFIG_X86_IO_APIC
else
if
(
!
memcmp
(
from
,
"acpi_skip_timer_override"
,
24
))
acpi_skip_timer_override
=
1
;
#endif
#ifdef CONFIG_X86_LOCAL_APIC
#ifdef CONFIG_X86_LOCAL_APIC
/* disable IO-APIC */
/* disable IO-APIC */
else
if
(
!
memcmp
(
from
,
"noapic"
,
6
))
else
if
(
!
memcmp
(
from
,
"noapic"
,
6
))
...
...
arch/i386/mach-default/setup.c
View file @
4774cf7a
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
#include <linux/init.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <asm/acpi.h>
#include <asm/arch_hooks.h>
#include <asm/arch_hooks.h>
/**
/**
...
@@ -43,7 +44,8 @@ void __init intr_init_hook(void)
...
@@ -43,7 +44,8 @@ void __init intr_init_hook(void)
apic_intr_init
();
apic_intr_init
();
#endif
#endif
setup_irq
(
2
,
&
irq2
);
if
(
!
acpi_ioapic
)
setup_irq
(
2
,
&
irq2
);
}
}
/**
/**
...
...
arch/i386/mach-es7000/setup.c
View file @
4774cf7a
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
#include <linux/init.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <asm/acpi.h>
#include <asm/arch_hooks.h>
#include <asm/arch_hooks.h>
/**
/**
...
@@ -17,8 +18,7 @@
...
@@ -17,8 +18,7 @@
* the "ordinary" interrupt call gates. For legacy reasons, the ISA
* the "ordinary" interrupt call gates. For legacy reasons, the ISA
* interrupts should be initialised here if the machine emulates a PC
* interrupts should be initialised here if the machine emulates a PC
* in any way.
* in any way.
**/
**/
void
__init
pre_intr_init_hook
(
void
)
void
__init
pre_intr_init_hook
(
void
)
{
{
init_ISA_irqs
();
init_ISA_irqs
();
}
}
...
@@ -43,7 +43,8 @@ void __init intr_init_hook(void)
...
@@ -43,7 +43,8 @@ void __init intr_init_hook(void)
apic_intr_init
();
apic_intr_init
();
#endif
#endif
setup_irq
(
2
,
&
irq2
);
if
(
!
acpi_ioapic
)
setup_irq
(
2
,
&
irq2
);
}
}
/**
/**
...
...
arch/i386/mach-voyager/setup.c
View file @
4774cf7a
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
#include <linux/init.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <asm/acpi.h>
#include <asm/arch_hooks.h>
#include <asm/arch_hooks.h>
void
__init
pre_intr_init_hook
(
void
)
void
__init
pre_intr_init_hook
(
void
)
...
@@ -24,7 +25,8 @@ void __init intr_init_hook(void)
...
@@ -24,7 +25,8 @@ void __init intr_init_hook(void)
smp_intr_init
();
smp_intr_init
();
#endif
#endif
setup_irq
(
2
,
&
irq2
);
if
(
!
acpi_ioapic
)
setup_irq
(
2
,
&
irq2
);
}
}
void
__init
pre_setup_arch_hook
(
void
)
void
__init
pre_setup_arch_hook
(
void
)
...
...
arch/i386/pci/acpi.c
View file @
4774cf7a
...
@@ -21,7 +21,6 @@ static int __init pci_acpi_init(void)
...
@@ -21,7 +21,6 @@ static int __init pci_acpi_init(void)
if
(
!
acpi_noirq
)
{
if
(
!
acpi_noirq
)
{
if
(
!
acpi_pci_irq_init
())
{
if
(
!
acpi_pci_irq_init
())
{
printk
(
KERN_INFO
"PCI: Using ACPI for IRQ routing
\n
"
);
printk
(
KERN_INFO
"PCI: Using ACPI for IRQ routing
\n
"
);
printk
(
KERN_INFO
"PCI: if you experience problems, try using option 'pci=noacpi' or even 'acpi=off'
\n
"
);
pcibios_scanned
++
;
pcibios_scanned
++
;
pcibios_enable_irq
=
acpi_pci_irq_enable
;
pcibios_enable_irq
=
acpi_pci_irq_enable
;
}
else
}
else
...
...
arch/i386/pci/irq.c
View file @
4774cf7a
...
@@ -453,15 +453,12 @@ static int pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
...
@@ -453,15 +453,12 @@ static int pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
static
__init
int
intel_router_probe
(
struct
irq_router
*
r
,
struct
pci_dev
*
router
,
u16
device
)
static
__init
int
intel_router_probe
(
struct
irq_router
*
r
,
struct
pci_dev
*
router
,
u16
device
)
{
{
#if 0 /* Let's see what chip this is supposed to be ... */
/* 440GX has a proprietary PIRQ router -- don't use it */
/* We must not touch 440GX even if we have tables. 440GX has
different IRQ routing weirdness */
if
(
pci_find_device
(
PCI_VENDOR_ID_INTEL
,
if
(
pci_find_device
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82443GX_0
,
NULL
)
||
PCI_DEVICE_ID_INTEL_82443GX_0
,
NULL
)
||
pci_find_device
(
PCI_VENDOR_ID_INTEL
,
pci_find_device
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82443GX_2
,
NULL
))
PCI_DEVICE_ID_INTEL_82443GX_2
,
NULL
))
return
0
;
return
0
;
#endif
switch
(
device
)
switch
(
device
)
{
{
...
...
arch/x86_64/kernel/Makefile
View file @
4774cf7a
...
@@ -8,7 +8,7 @@ obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \
...
@@ -8,7 +8,7 @@ obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \
ptrace.o i8259.o ioport.o ldt.o setup.o time.o sys_x86_64.o
\
ptrace.o i8259.o ioport.o ldt.o setup.o time.o sys_x86_64.o
\
x8664_ksyms.o i387.o syscall.o vsyscall.o
\
x8664_ksyms.o i387.o syscall.o vsyscall.o
\
setup64.o bootflag.o e820.o reboot.o warmreboot.o
setup64.o bootflag.o e820.o reboot.o warmreboot.o
obj-y
+=
mce.o
acpi/
obj-y
+=
mce.o
obj-$(CONFIG_MTRR)
+=
../../i386/kernel/cpu/mtrr/
obj-$(CONFIG_MTRR)
+=
../../i386/kernel/cpu/mtrr/
obj-$(CONFIG_ACPI_BOOT)
+=
acpi/
obj-$(CONFIG_ACPI_BOOT)
+=
acpi/
...
...
arch/x86_64/kernel/i8259.c
View file @
4774cf7a
...
@@ -13,6 +13,7 @@
...
@@ -13,6 +13,7 @@
#include <linux/kernel_stat.h>
#include <linux/kernel_stat.h>
#include <linux/sysdev.h>
#include <linux/sysdev.h>
#include <asm/acpi.h>
#include <asm/atomic.h>
#include <asm/atomic.h>
#include <asm/system.h>
#include <asm/system.h>
#include <asm/io.h>
#include <asm/io.h>
...
@@ -490,5 +491,6 @@ void __init init_IRQ(void)
...
@@ -490,5 +491,6 @@ void __init init_IRQ(void)
*/
*/
setup_timer
();
setup_timer
();
setup_irq
(
2
,
&
irq2
);
if
(
!
acpi_ioapic
)
setup_irq
(
2
,
&
irq2
);
}
}
arch/x86_64/kernel/io_apic.c
View file @
4774cf7a
...
@@ -1740,18 +1740,10 @@ static inline void check_timer(void)
...
@@ -1740,18 +1740,10 @@ static inline void check_timer(void)
/*
/*
*
*
* IRQ's that are handled by the
old PIC in all cases:
* IRQ's that are handled by the
PIC in the MPS IOAPIC case.
* - IRQ2 is the cascade IRQ, and cannot be a io-apic IRQ.
* - IRQ2 is the cascade IRQ, and cannot be a io-apic IRQ.
* Linux doesn't really care, as it's not actually used
* Linux doesn't really care, as it's not actually used
* for any interrupt handling anyway.
* for any interrupt handling anyway.
* - There used to be IRQ13 here as well, but all
* MPS-compliant must not use it for FPU coupling and we
* want to use exception 16 anyway. And there are
* systems who connect it to an I/O APIC for other uses.
* Thus we don't mark it special any longer.
*
* Additionally, something is definitely wrong with irq9
* on PIIX4 boards.
*/
*/
#define PIC_IRQS (1<<2)
#define PIC_IRQS (1<<2)
...
@@ -1759,7 +1751,11 @@ void __init setup_IO_APIC(void)
...
@@ -1759,7 +1751,11 @@ void __init setup_IO_APIC(void)
{
{
enable_IO_APIC
();
enable_IO_APIC
();
io_apic_irqs
=
~
PIC_IRQS
;
if
(
acpi_ioapic
)
io_apic_irqs
=
~
0
;
/* all IRQs go through IOAPIC */
else
io_apic_irqs
=
~
PIC_IRQS
;
printk
(
"ENABLING IO-APIC IRQs
\n
"
);
printk
(
"ENABLING IO-APIC IRQs
\n
"
);
/*
/*
...
...
arch/x86_64/kernel/mpparse.c
View file @
4774cf7a
...
@@ -784,8 +784,6 @@ void __init mp_override_legacy_irq (
...
@@ -784,8 +784,6 @@ void __init mp_override_legacy_irq (
u32
gsi
)
u32
gsi
)
{
{
struct
mpc_config_intsrc
intsrc
;
struct
mpc_config_intsrc
intsrc
;
int
i
=
0
;
int
found
=
0
;
int
ioapic
=
-
1
;
int
ioapic
=
-
1
;
int
pin
=
-
1
;
int
pin
=
-
1
;
...
@@ -818,23 +816,9 @@ void __init mp_override_legacy_irq (
...
@@ -818,23 +816,9 @@ void __init mp_override_legacy_irq (
(
intsrc
.
mpc_irqflag
>>
2
)
&
3
,
intsrc
.
mpc_srcbus
,
(
intsrc
.
mpc_irqflag
>>
2
)
&
3
,
intsrc
.
mpc_srcbus
,
intsrc
.
mpc_srcbusirq
,
intsrc
.
mpc_dstapic
,
intsrc
.
mpc_dstirq
);
intsrc
.
mpc_srcbusirq
,
intsrc
.
mpc_dstapic
,
intsrc
.
mpc_dstirq
);
/*
mp_irqs
[
mp_irq_entries
]
=
intsrc
;
* If an existing [IOAPIC.PIN -> IRQ] routing entry exists we override it.
if
(
++
mp_irq_entries
==
MAX_IRQ_SOURCES
)
* Otherwise create a new entry (e.g. gsi == 2).
panic
(
"Max # of irq sources exceeded!
\n
"
);
*/
for
(
i
=
0
;
i
<
mp_irq_entries
;
i
++
)
{
if
((
mp_irqs
[
i
].
mpc_srcbus
==
intsrc
.
mpc_srcbus
)
&&
(
mp_irqs
[
i
].
mpc_srcbusirq
==
intsrc
.
mpc_srcbusirq
))
{
mp_irqs
[
i
]
=
intsrc
;
found
=
1
;
break
;
}
}
if
(
!
found
)
{
mp_irqs
[
mp_irq_entries
]
=
intsrc
;
if
(
++
mp_irq_entries
==
MAX_IRQ_SOURCES
)
panic
(
"Max # of irq sources exceeded!
\n
"
);
}
return
;
return
;
}
}
...
@@ -865,13 +849,22 @@ void __init mp_config_acpi_legacy_irqs (void)
...
@@ -865,13 +849,22 @@ void __init mp_config_acpi_legacy_irqs (void)
intsrc
.
mpc_dstapic
=
mp_ioapics
[
ioapic
].
mpc_apicid
;
intsrc
.
mpc_dstapic
=
mp_ioapics
[
ioapic
].
mpc_apicid
;
/*
/*
* Use the default configuration for the IRQs 0-15.
These may be
* Use the default configuration for the IRQs 0-15.
Unless
* overridden by (MADT) interrupt source override entries.
* overridden by (MADT) interrupt source override entries.
*/
*/
for
(
i
=
0
;
i
<
16
;
i
++
)
{
for
(
i
=
0
;
i
<
16
;
i
++
)
{
int
idx
;
for
(
idx
=
0
;
idx
<
mp_irq_entries
;
idx
++
)
if
(
mp_irqs
[
idx
].
mpc_srcbus
==
MP_ISA_BUS
&&
(
mp_irqs
[
idx
].
mpc_srcbusirq
==
i
||
mp_irqs
[
idx
].
mpc_dstirq
==
i
))
break
;
if
(
i
==
2
)
if
(
idx
!=
mp_irq_entries
)
{
continue
;
/* Don't connect IRQ2 */
printk
(
KERN_DEBUG
"ACPI: IRQ%d used by override.
\n
"
,
i
);
continue
;
/* IRQ already used */
}
intsrc
.
mpc_irqtype
=
mp_INT
;
intsrc
.
mpc_irqtype
=
mp_INT
;
intsrc
.
mpc_srcbusirq
=
i
;
/* Identity mapped */
intsrc
.
mpc_srcbusirq
=
i
;
/* Identity mapped */
...
...
arch/x86_64/kernel/setup.c
View file @
4774cf7a
...
@@ -65,8 +65,8 @@ struct cpuinfo_x86 boot_cpu_data;
...
@@ -65,8 +65,8 @@ struct cpuinfo_x86 boot_cpu_data;
unsigned
long
mmu_cr4_features
;
unsigned
long
mmu_cr4_features
;
EXPORT_SYMBOL_GPL
(
mmu_cr4_features
);
EXPORT_SYMBOL_GPL
(
mmu_cr4_features
);
int
acpi_disabled
=
0
;
int
acpi_disabled
;
EXPORT_SYMBOL
(
acpi_disabled
);
#ifdef CONFIG_ACPI_BOOT
#ifdef CONFIG_ACPI_BOOT
extern
int
__initdata
acpi_ht
;
extern
int
__initdata
acpi_ht
;
extern
acpi_interrupt_flags
acpi_sci_flags
;
extern
acpi_interrupt_flags
acpi_sci_flags
;
...
@@ -242,7 +242,7 @@ static __init void parse_cmdline_early (char ** cmdline_p)
...
@@ -242,7 +242,7 @@ static __init void parse_cmdline_early (char ** cmdline_p)
#ifdef CONFIG_ACPI_BOOT
#ifdef CONFIG_ACPI_BOOT
/* "acpi=off" disables both ACPI table parsing and interpreter init */
/* "acpi=off" disables both ACPI table parsing and interpreter init */
if
(
!
memcmp
(
from
,
"acpi=off"
,
8
))
if
(
!
memcmp
(
from
,
"acpi=off"
,
8
))
acpi_disabled
=
1
;
disable_acpi
()
;
if
(
!
memcmp
(
from
,
"acpi=force"
,
10
))
{
if
(
!
memcmp
(
from
,
"acpi=force"
,
10
))
{
/* add later when we do DMI horrors: */
/* add later when we do DMI horrors: */
...
@@ -256,7 +256,9 @@ static __init void parse_cmdline_early (char ** cmdline_p)
...
@@ -256,7 +256,9 @@ static __init void parse_cmdline_early (char ** cmdline_p)
acpi_ht
=
1
;
acpi_ht
=
1
;
}
}
else
if
(
!
memcmp
(
from
,
"pci=noacpi"
,
10
))
else
if
(
!
memcmp
(
from
,
"pci=noacpi"
,
10
))
acpi_noirq_set
();
acpi_disable_pci
();
else
if
(
!
memcmp
(
from
,
"acpi=noirq"
,
10
))
acpi_noirq_set
();
else
if
(
!
memcmp
(
from
,
"acpi_sci=edge"
,
13
))
else
if
(
!
memcmp
(
from
,
"acpi_sci=edge"
,
13
))
acpi_sci_flags
.
trigger
=
1
;
acpi_sci_flags
.
trigger
=
1
;
...
...
drivers/acpi/ac.c
View file @
4774cf7a
...
@@ -158,6 +158,7 @@ acpi_ac_add_fs (
...
@@ -158,6 +158,7 @@ acpi_ac_add_fs (
acpi_ac_dir
);
acpi_ac_dir
);
if
(
!
acpi_device_dir
(
device
))
if
(
!
acpi_device_dir
(
device
))
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_device_dir
(
device
)
->
owner
=
THIS_MODULE
;
}
}
/* 'state' [R] */
/* 'state' [R] */
...
@@ -170,6 +171,7 @@ acpi_ac_add_fs (
...
@@ -170,6 +171,7 @@ acpi_ac_add_fs (
else
{
else
{
entry
->
proc_fops
=
&
acpi_ac_fops
;
entry
->
proc_fops
=
&
acpi_ac_fops
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
return_VALUE
(
0
);
return_VALUE
(
0
);
...
@@ -320,6 +322,7 @@ acpi_ac_init (void)
...
@@ -320,6 +322,7 @@ acpi_ac_init (void)
acpi_ac_dir
=
proc_mkdir
(
ACPI_AC_CLASS
,
acpi_root_dir
);
acpi_ac_dir
=
proc_mkdir
(
ACPI_AC_CLASS
,
acpi_root_dir
);
if
(
!
acpi_ac_dir
)
if
(
!
acpi_ac_dir
)
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_ac_dir
->
owner
=
THIS_MODULE
;
result
=
acpi_bus_register_driver
(
&
acpi_ac_driver
);
result
=
acpi_bus_register_driver
(
&
acpi_ac_driver
);
if
(
result
<
0
)
{
if
(
result
<
0
)
{
...
...
drivers/acpi/asus_acpi.c
View file @
4774cf7a
...
@@ -41,7 +41,7 @@
...
@@ -41,7 +41,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
7
"
#define ASUS_ACPI_VERSION "0.2
8
"
#define PROC_ASUS "asus" //the directory
#define PROC_ASUS "asus" //the directory
#define PROC_MLED "mled"
#define PROC_MLED "mled"
...
@@ -125,12 +125,11 @@ struct asus_hotk {
...
@@ -125,12 +125,11 @@ struct asus_hotk {
L5x
,
//L5800C
L5x
,
//L5800C
L8L
,
//L8400L
L8L
,
//L8400L
M1A
,
//M1300A
M1A
,
//M1300A
M2E
,
//M2400E
M2E
,
//M2400E, L4400L
P30
,
//Samsung P30
S1x
,
//S1300A, but also L1400B and M2400A (L84F)
S1x
,
//S1300A, but also L1400B and M2400A (L84F)
S2x
,
//S200 (J1 reported), Victor MP-XP7210
S2x
,
//S200 (J1 reported), Victor MP-XP7210
//TODO A1370D does not seem to have an ATK device
xxN
,
//M2400N, M3700N, M6800N, S1300N, S5200N (Centrino)
// L8400 model doesn't have ATK
xxN
,
//M2400N, M3700N, S1300N (Centrino)
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
...
@@ -140,6 +139,7 @@ struct asus_hotk {
...
@@ -140,6 +139,7 @@ struct asus_hotk {
#define A1x_PREFIX "\\_SB.PCI0.ISA.EC0."
#define A1x_PREFIX "\\_SB.PCI0.ISA.EC0."
#define L3C_PREFIX "\\_SB.PCI0.PX40.ECD0."
#define L3C_PREFIX "\\_SB.PCI0.PX40.ECD0."
#define M1A_PREFIX "\\_SB.PCI0.PX40.EC0."
#define M1A_PREFIX "\\_SB.PCI0.PX40.EC0."
#define P30_PREFIX "\\_SB.PCI0.LPCB.EC0."
#define S1x_PREFIX "\\_SB.PCI0.PX40."
#define S1x_PREFIX "\\_SB.PCI0.PX40."
#define S2x_PREFIX A1x_PREFIX
#define S2x_PREFIX A1x_PREFIX
#define xxN_PREFIX "\\_SB.PCI0.SBRG.EC0."
#define xxN_PREFIX "\\_SB.PCI0.SBRG.EC0."
...
@@ -166,7 +166,7 @@ static struct model_data model_conf[END_MODEL] = {
...
@@ -166,7 +166,7 @@ static struct model_data model_conf[END_MODEL] = {
.
mt_lcd_switch
=
A1x_PREFIX
"_Q10"
,
.
mt_lcd_switch
=
A1x_PREFIX
"_Q10"
,
.
lcd_status
=
"
\\
BKLI"
,
.
lcd_status
=
"
\\
BKLI"
,
.
brightness_up
=
A1x_PREFIX
"_Q0E"
,
.
brightness_up
=
A1x_PREFIX
"_Q0E"
,
.
brightness_down
=
A1x_PREFIX
"_Q0F"
,
.
brightness_down
=
A1x_PREFIX
"_Q0F"
},
},
{
{
...
@@ -176,11 +176,8 @@ static struct model_data model_conf[END_MODEL] = {
...
@@ -176,11 +176,8 @@ static struct model_data model_conf[END_MODEL] = {
.
wled_status
=
"
\\
SG66"
,
.
wled_status
=
"
\\
SG66"
,
.
mt_lcd_switch
=
"
\\
Q10"
,
.
mt_lcd_switch
=
"
\\
Q10"
,
.
lcd_status
=
"
\\
BAOF"
,
.
lcd_status
=
"
\\
BAOF"
,
.
brightness_up
=
"
\\
Q0E"
,
.
brightness_down
=
"
\\
Q0F"
,
.
brightness_set
=
"SPLV"
,
.
brightness_set
=
"SPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_status
=
"
\\
CMOD"
,
.
display_set
=
"SDSP"
,
.
display_set
=
"SDSP"
,
.
display_get
=
"
\\
INFB"
.
display_get
=
"
\\
INFB"
},
},
...
@@ -217,11 +214,8 @@ static struct model_data model_conf[END_MODEL] = {
...
@@ -217,11 +214,8 @@ static struct model_data model_conf[END_MODEL] = {
.
mt_wled
=
"WLED"
,
.
mt_wled
=
"WLED"
,
.
mt_lcd_switch
=
L3C_PREFIX
"_Q10"
,
.
mt_lcd_switch
=
L3C_PREFIX
"_Q10"
,
.
lcd_status
=
"
\\
GL32"
,
.
lcd_status
=
"
\\
GL32"
,
.
brightness_up
=
L3C_PREFIX
"_Q0F"
,
.
brightness_down
=
L3C_PREFIX
"_Q0E"
,
.
brightness_set
=
"SPLV"
,
.
brightness_set
=
"SPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_status
=
"
\\
BLVL"
,
.
display_set
=
"SDSP"
,
.
display_set
=
"SDSP"
,
.
display_get
=
"
\\
_SB.PCI0.PCI1.VGAC.NMAP"
.
display_get
=
"
\\
_SB.PCI0.PCI1.VGAC.NMAP"
},
},
...
@@ -233,11 +227,8 @@ static struct model_data model_conf[END_MODEL] = {
...
@@ -233,11 +227,8 @@ static struct model_data model_conf[END_MODEL] = {
.
mt_wled
=
"WLED"
,
.
mt_wled
=
"WLED"
,
.
mt_lcd_switch
=
"
\\
Q10"
,
.
mt_lcd_switch
=
"
\\
Q10"
,
.
lcd_status
=
"
\\
BKLG"
,
.
lcd_status
=
"
\\
BKLG"
,
.
brightness_up
=
"
\\
Q0E"
,
.
brightness_down
=
"
\\
Q0F"
,
.
brightness_set
=
"SPLV"
,
.
brightness_set
=
"SPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_status
=
"
\\
BLVL"
,
.
display_set
=
"SDSP"
,
.
display_set
=
"SDSP"
,
.
display_get
=
"
\\
INFB"
.
display_get
=
"
\\
INFB"
},
},
...
@@ -257,14 +248,10 @@ static struct model_data model_conf[END_MODEL] = {
...
@@ -257,14 +248,10 @@ static struct model_data model_conf[END_MODEL] = {
{
{
.
name
=
"L5x"
,
.
name
=
"L5x"
,
.
mt_mled
=
"MLED"
,
.
mt_mled
=
"MLED"
,
// .mt_wled = "WLED",
/* WLED present, but not controlled by ACPI */
// .wled_status = "\\WRED",
/* Present, but not controlled by ACPI */
.
mt_tled
=
"TLED"
,
.
mt_tled
=
"TLED"
,
.
mt_lcd_switch
=
"
\\
Q0D"
,
.
mt_lcd_switch
=
"
\\
Q0D"
,
.
lcd_status
=
"
\\
BAOF"
,
.
lcd_status
=
"
\\
BAOF"
,
.
brightness_up
=
"
\\
Q0C"
,
.
brightness_down
=
"
\\
Q0B"
,
.
brightness_set
=
"SPLV"
,
.
brightness_set
=
"SPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_get
=
"GPLV"
,
.
display_set
=
"SDSP"
,
.
display_set
=
"SDSP"
,
...
@@ -294,14 +281,24 @@ static struct model_data model_conf[END_MODEL] = {
...
@@ -294,14 +281,24 @@ static struct model_data model_conf[END_MODEL] = {
.
mt_wled
=
"WLED"
,
.
mt_wled
=
"WLED"
,
.
mt_lcd_switch
=
"
\\
Q10"
,
.
mt_lcd_switch
=
"
\\
Q10"
,
.
lcd_status
=
"
\\
GP06"
,
.
lcd_status
=
"
\\
GP06"
,
.
brightness_up
=
"
\\
Q0E"
,
.
brightness_down
=
"
\\
Q0F"
,
.
brightness_set
=
"SPLV"
,
.
brightness_set
=
"SPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_get
=
"GPLV"
,
.
display_set
=
"SDSP"
,
.
display_set
=
"SDSP"
,
.
display_get
=
"
\\
INFB"
.
display_get
=
"
\\
INFB"
},
},
{
.
name
=
"P30"
,
.
mt_wled
=
"WLED"
,
.
mt_lcd_switch
=
P30_PREFIX
"_Q0E"
,
.
lcd_status
=
"
\\
BKLT"
,
.
brightness_up
=
P30_PREFIX
"_Q68"
,
.
brightness_down
=
P30_PREFIX
"_Q69"
,
.
brightness_get
=
"GPLV"
,
.
display_set
=
"SDSP"
,
.
display_get
=
"
\\
DNXT"
},
{
{
.
name
=
"S1x"
,
.
name
=
"S1x"
,
.
mt_mled
=
"MLED"
,
.
mt_mled
=
"MLED"
,
...
@@ -309,11 +306,8 @@ static struct model_data model_conf[END_MODEL] = {
...
@@ -309,11 +306,8 @@ static struct model_data model_conf[END_MODEL] = {
.
mt_wled
=
"WLED"
,
.
mt_wled
=
"WLED"
,
.
mt_lcd_switch
=
S1x_PREFIX
"Q10"
,
.
mt_lcd_switch
=
S1x_PREFIX
"Q10"
,
.
lcd_status
=
"
\\
PNOF"
,
.
lcd_status
=
"
\\
PNOF"
,
.
brightness_up
=
S1x_PREFIX
"Q0F"
,
.
brightness_down
=
S1x_PREFIX
"Q0E"
,
.
brightness_set
=
"SPLV"
,
.
brightness_set
=
"SPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_get
=
"GPLV"
.
brightness_status
=
"
\\
BRIT"
,
},
},
{
{
...
@@ -323,22 +317,17 @@ static struct model_data model_conf[END_MODEL] = {
...
@@ -323,22 +317,17 @@ static struct model_data model_conf[END_MODEL] = {
.
mt_lcd_switch
=
S2x_PREFIX
"_Q10"
,
.
mt_lcd_switch
=
S2x_PREFIX
"_Q10"
,
.
lcd_status
=
"
\\
BKLI"
,
.
lcd_status
=
"
\\
BKLI"
,
.
brightness_up
=
S2x_PREFIX
"_Q0B"
,
.
brightness_up
=
S2x_PREFIX
"_Q0B"
,
.
brightness_down
=
S2x_PREFIX
"_Q0A"
,
.
brightness_down
=
S2x_PREFIX
"_Q0A"
},
},
{
{
.
name
=
"xxN"
,
.
name
=
"xxN"
,
.
mt_mled
=
"MLED"
,
.
mt_mled
=
"MLED"
,
// .mt_wled = "WLED",
/* WLED present, but not controlled by ACPI */
// .wled_status = "\\PO33",
/* Present, but not controlled by ACPI */
.
mt_lcd_switch
=
xxN_PREFIX
"_Q10"
,
.
mt_lcd_switch
=
xxN_PREFIX
"_Q10"
,
.
lcd_status
=
"
\\
BKLT"
,
.
lcd_status
=
"
\\
BKLT"
,
.
brightness_up
=
xxN_PREFIX
"_Q0F"
,
.
brightness_down
=
xxN_PREFIX
"_Q0E"
,
.
brightness_set
=
"SPLV"
,
.
brightness_set
=
"SPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_get
=
"GPLV"
,
.
brightness_status
=
"
\\
LBTN"
,
.
display_set
=
"SDSP"
,
.
display_set
=
"SDSP"
,
.
display_get
=
"
\\
ADVG"
.
display_get
=
"
\\
ADVG"
}
}
...
@@ -663,6 +652,23 @@ proc_write_lcd(struct file *file, const char *buffer,
...
@@ -663,6 +652,23 @@ proc_write_lcd(struct file *file, const char *buffer,
}
}
static
int
read_brightness
(
struct
asus_hotk
*
hotk
)
{
int
value
;
if
(
hotk
->
methods
->
brightness_get
)
{
/* SPLV/GPLV laptop */
if
(
!
read_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
brightness_get
,
&
value
))
printk
(
KERN_WARNING
"Asus ACPI: Error reading brightness
\n
"
);
}
else
if
(
hotk
->
methods
->
brightness_status
)
{
/* For D1 for example */
if
(
!
read_acpi_int
(
NULL
,
hotk
->
methods
->
brightness_status
,
&
value
))
printk
(
KERN_WARNING
"Asus ACPI: Error reading brightness
\n
"
);
}
else
/* No GPLV method */
value
=
hotk
->
brightness
;
return
value
;
}
/*
/*
* Change the brightness level
* Change the brightness level
*/
*/
...
@@ -679,7 +685,7 @@ static void set_brightness(int value, struct asus_hotk *hotk)
...
@@ -679,7 +685,7 @@ static void set_brightness(int value, struct asus_hotk *hotk)
}
}
/* No SPLV method if we are here, act as appropriate */
/* No SPLV method if we are here, act as appropriate */
value
-=
hotk
->
brightness
;
value
-=
read_brightness
(
hotk
)
;
while
(
value
!=
0
)
{
while
(
value
!=
0
)
{
status
=
acpi_evaluate_object
(
NULL
,
(
value
>
0
)
?
status
=
acpi_evaluate_object
(
NULL
,
(
value
>
0
)
?
hotk
->
methods
->
brightness_up
:
hotk
->
methods
->
brightness_up
:
...
@@ -692,23 +698,6 @@ static void set_brightness(int value, struct asus_hotk *hotk)
...
@@ -692,23 +698,6 @@ static void set_brightness(int value, struct asus_hotk *hotk)
return
;
return
;
}
}
static
int
read_brightness
(
struct
asus_hotk
*
hotk
)
{
int
value
;
if
(
hotk
->
methods
->
brightness_get
)
{
/* SPLV/GPLV laptop */
if
(
!
read_acpi_int
(
hotk
->
handle
,
hotk
->
methods
->
brightness_get
,
&
value
))
printk
(
KERN_WARNING
"Asus ACPI: Error reading brightness
\n
"
);
}
else
if
(
hotk
->
methods
->
brightness_status
)
{
/* For D1 for example */
if
(
!
read_acpi_int
(
NULL
,
hotk
->
methods
->
brightness_status
,
&
value
))
printk
(
KERN_WARNING
"Asus ACPI: Error reading brightness
\n
"
);
}
else
/* No GPLV method */
value
=
hotk
->
brightness
;
return
value
;
}
static
int
static
int
proc_read_brn
(
char
*
page
,
char
**
start
,
off_t
off
,
int
count
,
int
*
eof
,
proc_read_brn
(
char
*
page
,
char
**
start
,
off_t
off
,
int
count
,
int
*
eof
,
void
*
data
)
void
*
data
)
...
@@ -929,12 +918,29 @@ static int __init asus_hotk_get_info(struct asus_hotk *hotk)
...
@@ -929,12 +918,29 @@ static int __init asus_hotk_get_info(struct asus_hotk *hotk)
return
-
ENODEV
;
return
-
ENODEV
;
}
}
/*
For testing purposes
*/
/*
This needs to be called for some laptops to init properly
*/
if
(
!
read_acpi_int
(
hotk
->
handle
,
"BSTS"
,
&
bsts_result
))
if
(
!
read_acpi_int
(
hotk
->
handle
,
"BSTS"
,
&
bsts_result
))
printk
(
KERN_WARNING
" Error calling BSTS
\n
"
);
printk
(
KERN_WARNING
" Error calling BSTS
\n
"
);
else
if
(
bsts_result
)
else
if
(
bsts_result
)
printk
(
KERN_NOTICE
" BSTS called, 0x%02x returned
\n
"
,
bsts_result
);
printk
(
KERN_NOTICE
" BSTS called, 0x%02x returned
\n
"
,
bsts_result
);
/* Samsung P30 has a device with a valid _HID whose INIT does not
* return anything. Catch this one and any similar here */
if
(
buffer
.
pointer
==
NULL
)
{
if
(
asus_info
&&
/* Samsung P30 */
strncmp
(
asus_info
->
oem_table_id
,
"ODEM"
,
4
)
==
0
)
{
hotk
->
model
=
P30
;
printk
(
KERN_NOTICE
" Samsung P30 detected, supported
\n
"
);
}
else
{
hotk
->
model
=
M2E
;
printk
(
KERN_WARNING
" no string returned by INIT
\n
"
);
printk
(
KERN_WARNING
" trying default values, supply "
"the developers with your DSDT
\n
"
);
}
hotk
->
methods
=
&
model_conf
[
hotk
->
model
];
return
AE_OK
;
}
model
=
(
union
acpi_object
*
)
buffer
.
pointer
;
model
=
(
union
acpi_object
*
)
buffer
.
pointer
;
if
(
model
->
type
==
ACPI_TYPE_STRING
)
{
if
(
model
->
type
==
ACPI_TYPE_STRING
)
{
printk
(
KERN_NOTICE
" %s model detected, "
,
model
->
string
.
pointer
);
printk
(
KERN_NOTICE
" %s model detected, "
,
model
->
string
.
pointer
);
...
@@ -953,12 +959,14 @@ static int __init asus_hotk_get_info(struct asus_hotk *hotk)
...
@@ -953,12 +959,14 @@ static int __init asus_hotk_get_info(struct asus_hotk *hotk)
hotk
->
model
=
L8L
;
hotk
->
model
=
L8L
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"M2N"
,
3
)
==
0
||
else
if
(
strncmp
(
model
->
string
.
pointer
,
"M2N"
,
3
)
==
0
||
strncmp
(
model
->
string
.
pointer
,
"M3N"
,
3
)
==
0
||
strncmp
(
model
->
string
.
pointer
,
"M3N"
,
3
)
==
0
||
strncmp
(
model
->
string
.
pointer
,
"M6N"
,
3
)
==
0
||
strncmp
(
model
->
string
.
pointer
,
"S1N"
,
3
)
==
0
||
strncmp
(
model
->
string
.
pointer
,
"S1N"
,
3
)
==
0
||
strncmp
(
model
->
string
.
pointer
,
"S5N"
,
3
)
==
0
)
strncmp
(
model
->
string
.
pointer
,
"S5N"
,
3
)
==
0
)
hotk
->
model
=
xxN
;
hotk
->
model
=
xxN
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"M1"
,
2
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"M1"
,
2
)
==
0
)
hotk
->
model
=
M1A
;
hotk
->
model
=
M1A
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"M2"
,
2
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"M2"
,
2
)
==
0
||
strncmp
(
model
->
string
.
pointer
,
"L4E"
,
3
)
==
0
)
hotk
->
model
=
M2E
;
hotk
->
model
=
M2E
;
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L2"
,
2
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"L2"
,
2
)
==
0
)
hotk
->
model
=
L2D
;
hotk
->
model
=
L2D
;
...
@@ -994,6 +1002,13 @@ static int __init asus_hotk_get_info(struct asus_hotk *hotk)
...
@@ -994,6 +1002,13 @@ static int __init asus_hotk_get_info(struct asus_hotk *hotk)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"S5N"
,
3
)
==
0
)
else
if
(
strncmp
(
model
->
string
.
pointer
,
"S5N"
,
3
)
==
0
)
hotk
->
methods
->
mt_mled
=
NULL
;
hotk
->
methods
->
mt_mled
=
NULL
;
/* S5N has no MLED */
/* S5N has no MLED */
else
if
(
strncmp
(
model
->
string
.
pointer
,
"M6N"
,
3
)
==
0
)
{
hotk
->
methods
->
display_get
=
NULL
;
//TODO
hotk
->
methods
->
lcd_status
=
"
\\
_SB.BKLT"
;
hotk
->
methods
->
mt_wled
=
"WLED"
;
hotk
->
methods
->
wled_status
=
"
\\
_SB.PCI0.SBRG.SG13"
;
/* M6N differs slightly and has a usable WLED */
}
else
if
(
asus_info
)
{
else
if
(
asus_info
)
{
if
(
strncmp
(
asus_info
->
oem_table_id
,
"L1"
,
2
)
==
0
)
if
(
strncmp
(
asus_info
->
oem_table_id
,
"L1"
,
2
)
==
0
)
hotk
->
methods
->
mled_status
=
NULL
;
hotk
->
methods
->
mled_status
=
NULL
;
...
...
drivers/acpi/battery.c
View file @
4774cf7a
...
@@ -486,14 +486,18 @@ acpi_battery_read_state (
...
@@ -486,14 +486,18 @@ acpi_battery_read_state (
else
else
p
+=
sprintf
(
p
,
"capacity state: critical
\n
"
);
p
+=
sprintf
(
p
,
"capacity state: critical
\n
"
);
if
((
bst
->
state
&
0x01
)
&&
(
bst
->
state
&
0x02
))
if
((
bst
->
state
&
0x01
)
&&
(
bst
->
state
&
0x02
))
{
p
+=
sprintf
(
p
,
"charging state: charging/discharging
\n
"
);
p
+=
sprintf
(
p
,
"charging state: charging/discharging
\n
"
);
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Battery Charging and Discharging?
\n
"
));
}
else
if
(
bst
->
state
&
0x01
)
else
if
(
bst
->
state
&
0x01
)
p
+=
sprintf
(
p
,
"charging state: discharging
\n
"
);
p
+=
sprintf
(
p
,
"charging state: discharging
\n
"
);
else
if
(
bst
->
state
&
0x02
)
else
if
(
bst
->
state
&
0x02
)
p
+=
sprintf
(
p
,
"charging state: charging
\n
"
);
p
+=
sprintf
(
p
,
"charging state: charging
\n
"
);
else
else
{
p
+=
sprintf
(
p
,
"charging state: unknown
\n
"
);
p
+=
sprintf
(
p
,
"charging state: charged
\n
"
);
}
if
(
bst
->
present_rate
==
ACPI_BATTERY_VALUE_UNKNOWN
)
if
(
bst
->
present_rate
==
ACPI_BATTERY_VALUE_UNKNOWN
)
p
+=
sprintf
(
p
,
"present rate: unknown
\n
"
);
p
+=
sprintf
(
p
,
"present rate: unknown
\n
"
);
...
@@ -621,6 +625,7 @@ acpi_battery_add_fs (
...
@@ -621,6 +625,7 @@ acpi_battery_add_fs (
acpi_battery_dir
);
acpi_battery_dir
);
if
(
!
acpi_device_dir
(
device
))
if
(
!
acpi_device_dir
(
device
))
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_device_dir
(
device
)
->
owner
=
THIS_MODULE
;
}
}
/* 'info' [R] */
/* 'info' [R] */
...
@@ -633,6 +638,7 @@ acpi_battery_add_fs (
...
@@ -633,6 +638,7 @@ acpi_battery_add_fs (
else
{
else
{
entry
->
read_proc
=
acpi_battery_read_info
;
entry
->
read_proc
=
acpi_battery_read_info
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
/* 'status' [R] */
/* 'status' [R] */
...
@@ -645,6 +651,7 @@ acpi_battery_add_fs (
...
@@ -645,6 +651,7 @@ acpi_battery_add_fs (
else
{
else
{
entry
->
read_proc
=
acpi_battery_read_state
;
entry
->
read_proc
=
acpi_battery_read_state
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
/* 'alarm' [R/W] */
/* 'alarm' [R/W] */
...
@@ -658,6 +665,7 @@ acpi_battery_add_fs (
...
@@ -658,6 +665,7 @@ acpi_battery_add_fs (
entry
->
read_proc
=
acpi_battery_read_alarm
;
entry
->
read_proc
=
acpi_battery_read_alarm
;
entry
->
write_proc
=
acpi_battery_write_alarm
;
entry
->
write_proc
=
acpi_battery_write_alarm
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
return_VALUE
(
0
);
return_VALUE
(
0
);
...
@@ -809,6 +817,7 @@ acpi_battery_init (void)
...
@@ -809,6 +817,7 @@ acpi_battery_init (void)
acpi_battery_dir
=
proc_mkdir
(
ACPI_BATTERY_CLASS
,
acpi_root_dir
);
acpi_battery_dir
=
proc_mkdir
(
ACPI_BATTERY_CLASS
,
acpi_root_dir
);
if
(
!
acpi_battery_dir
)
if
(
!
acpi_battery_dir
)
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_battery_dir
->
owner
=
THIS_MODULE
;
result
=
acpi_bus_register_driver
(
&
acpi_battery_driver
);
result
=
acpi_bus_register_driver
(
&
acpi_battery_driver
);
if
(
result
<
0
)
{
if
(
result
<
0
)
{
...
...
drivers/acpi/button.c
View file @
4774cf7a
...
@@ -108,6 +108,9 @@ static struct file_operations acpi_button_state_fops = {
...
@@ -108,6 +108,9 @@ static struct file_operations acpi_button_state_fops = {
-------------------------------------------------------------------------- */
-------------------------------------------------------------------------- */
static
struct
proc_dir_entry
*
acpi_button_dir
;
static
struct
proc_dir_entry
*
acpi_button_dir
;
extern
struct
acpi_device
*
acpi_fixed_pwr_button
;
extern
struct
acpi_device
*
acpi_fixed_sleep_button
;
static
int
acpi_button_info_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
static
int
acpi_button_info_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
{
...
@@ -187,9 +190,14 @@ acpi_button_add_fs (
...
@@ -187,9 +190,14 @@ acpi_button_add_fs (
break
;
break
;
}
}
if
(
!
entry
)
return_VALUE
(
-
ENODEV
);
entry
->
owner
=
THIS_MODULE
;
acpi_device_dir
(
device
)
=
proc_mkdir
(
acpi_device_bid
(
device
),
entry
);
acpi_device_dir
(
device
)
=
proc_mkdir
(
acpi_device_bid
(
device
),
entry
);
if
(
!
acpi_device_dir
(
device
))
if
(
!
acpi_device_dir
(
device
))
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_device_dir
(
device
)
->
owner
=
THIS_MODULE
;
/* 'info' [R] */
/* 'info' [R] */
entry
=
create_proc_entry
(
ACPI_BUTTON_FILE_INFO
,
entry
=
create_proc_entry
(
ACPI_BUTTON_FILE_INFO
,
...
@@ -201,6 +209,7 @@ acpi_button_add_fs (
...
@@ -201,6 +209,7 @@ acpi_button_add_fs (
else
{
else
{
entry
->
proc_fops
=
&
acpi_button_info_fops
;
entry
->
proc_fops
=
&
acpi_button_info_fops
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
/* show lid state [R] */
/* show lid state [R] */
...
@@ -214,6 +223,7 @@ acpi_button_add_fs (
...
@@ -214,6 +223,7 @@ acpi_button_add_fs (
else
{
else
{
entry
->
proc_fops
=
&
acpi_button_state_fops
;
entry
->
proc_fops
=
&
acpi_button_state_fops
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
}
}
...
@@ -225,10 +235,28 @@ static int
...
@@ -225,10 +235,28 @@ static int
acpi_button_remove_fs
(
acpi_button_remove_fs
(
struct
acpi_device
*
device
)
struct
acpi_device
*
device
)
{
{
struct
acpi_button
*
button
=
NULL
;
ACPI_FUNCTION_TRACE
(
"acpi_button_remove_fs"
);
ACPI_FUNCTION_TRACE
(
"acpi_button_remove_fs"
);
button
=
acpi_driver_data
(
device
);
if
(
acpi_device_dir
(
device
))
{
if
(
acpi_device_dir
(
device
))
{
remove_proc_entry
(
acpi_device_bid
(
device
),
acpi_button_dir
);
switch
(
button
->
type
)
{
case
ACPI_BUTTON_TYPE_POWER
:
case
ACPI_BUTTON_TYPE_POWERF
:
remove_proc_entry
(
ACPI_BUTTON_SUBCLASS_POWER
,
acpi_button_dir
);
break
;
case
ACPI_BUTTON_TYPE_SLEEP
:
case
ACPI_BUTTON_TYPE_SLEEPF
:
remove_proc_entry
(
ACPI_BUTTON_SUBCLASS_SLEEP
,
acpi_button_dir
);
break
;
case
ACPI_BUTTON_TYPE_LID
:
remove_proc_entry
(
ACPI_BUTTON_SUBCLASS_LID
,
acpi_button_dir
);
break
;
}
acpi_device_dir
(
device
)
=
NULL
;
acpi_device_dir
(
device
)
=
NULL
;
}
}
...
@@ -485,6 +513,7 @@ acpi_button_init (void)
...
@@ -485,6 +513,7 @@ acpi_button_init (void)
acpi_button_dir
=
proc_mkdir
(
ACPI_BUTTON_CLASS
,
acpi_root_dir
);
acpi_button_dir
=
proc_mkdir
(
ACPI_BUTTON_CLASS
,
acpi_root_dir
);
if
(
!
acpi_button_dir
)
if
(
!
acpi_button_dir
)
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_button_dir
->
owner
=
THIS_MODULE
;
result
=
acpi_bus_register_driver
(
&
acpi_button_driver
);
result
=
acpi_bus_register_driver
(
&
acpi_button_driver
);
if
(
result
<
0
)
{
if
(
result
<
0
)
{
...
@@ -501,6 +530,12 @@ acpi_button_exit (void)
...
@@ -501,6 +530,12 @@ acpi_button_exit (void)
{
{
ACPI_FUNCTION_TRACE
(
"acpi_button_exit"
);
ACPI_FUNCTION_TRACE
(
"acpi_button_exit"
);
if
(
acpi_fixed_pwr_button
)
acpi_button_remove
(
acpi_fixed_pwr_button
,
ACPI_BUS_TYPE_POWER_BUTTON
);
if
(
acpi_fixed_sleep_button
)
acpi_button_remove
(
acpi_fixed_sleep_button
,
ACPI_BUS_TYPE_SLEEP_BUTTON
);
acpi_bus_unregister_driver
(
&
acpi_button_driver
);
acpi_bus_unregister_driver
(
&
acpi_button_driver
);
remove_proc_entry
(
ACPI_BUTTON_CLASS
,
acpi_root_dir
);
remove_proc_entry
(
ACPI_BUTTON_CLASS
,
acpi_root_dir
);
...
...
drivers/acpi/fan.c
View file @
4774cf7a
...
@@ -157,6 +157,7 @@ acpi_fan_add_fs (
...
@@ -157,6 +157,7 @@ acpi_fan_add_fs (
acpi_fan_dir
);
acpi_fan_dir
);
if
(
!
acpi_device_dir
(
device
))
if
(
!
acpi_device_dir
(
device
))
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_device_dir
(
device
)
->
owner
=
THIS_MODULE
;
}
}
/* 'status' [R/W] */
/* 'status' [R/W] */
...
@@ -170,6 +171,7 @@ acpi_fan_add_fs (
...
@@ -170,6 +171,7 @@ acpi_fan_add_fs (
entry
->
read_proc
=
acpi_fan_read_state
;
entry
->
read_proc
=
acpi_fan_read_state
;
entry
->
write_proc
=
acpi_fan_write_state
;
entry
->
write_proc
=
acpi_fan_write_state
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
return_VALUE
(
0
);
return_VALUE
(
0
);
...
@@ -273,6 +275,7 @@ acpi_fan_init (void)
...
@@ -273,6 +275,7 @@ acpi_fan_init (void)
acpi_fan_dir
=
proc_mkdir
(
ACPI_FAN_CLASS
,
acpi_root_dir
);
acpi_fan_dir
=
proc_mkdir
(
ACPI_FAN_CLASS
,
acpi_root_dir
);
if
(
!
acpi_fan_dir
)
if
(
!
acpi_fan_dir
)
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_fan_dir
->
owner
=
THIS_MODULE
;
result
=
acpi_bus_register_driver
(
&
acpi_fan_driver
);
result
=
acpi_bus_register_driver
(
&
acpi_fan_driver
);
if
(
result
<
0
)
{
if
(
result
<
0
)
{
...
...
drivers/acpi/osl.c
View file @
4774cf7a
...
@@ -63,7 +63,7 @@ int acpi_in_debugger;
...
@@ -63,7 +63,7 @@ int acpi_in_debugger;
extern
char
line_buf
[
80
];
extern
char
line_buf
[
80
];
#endif
/*ENABLE_DEBUGGER*/
#endif
/*ENABLE_DEBUGGER*/
static
int
acpi_irq_irq
;
static
unsigned
int
acpi_irq_irq
;
static
OSD_HANDLER
acpi_irq_handler
;
static
OSD_HANDLER
acpi_irq_handler
;
static
void
*
acpi_irq_context
;
static
void
*
acpi_irq_context
;
...
@@ -215,7 +215,8 @@ acpi_os_predefined_override (const struct acpi_predefined_names *init_val,
...
@@ -215,7 +215,8 @@ acpi_os_predefined_override (const struct acpi_predefined_names *init_val,
*
new_val
=
NULL
;
*
new_val
=
NULL
;
if
(
!
memcmp
(
init_val
->
name
,
"_OS_"
,
4
)
&&
strlen
(
acpi_os_name
))
{
if
(
!
memcmp
(
init_val
->
name
,
"_OS_"
,
4
)
&&
strlen
(
acpi_os_name
))
{
printk
(
KERN_INFO
PREFIX
"Overriding _OS definition
\n
"
);
printk
(
KERN_INFO
PREFIX
"Overriding _OS definition %s
\n
"
,
acpi_os_name
);
*
new_val
=
acpi_os_name
;
*
new_val
=
acpi_os_name
;
}
}
...
@@ -240,23 +241,22 @@ acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
...
@@ -240,23 +241,22 @@ acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
}
}
acpi_status
acpi_status
acpi_os_install_interrupt_handler
(
u32
irq
,
OSD_HANDLER
handler
,
void
*
context
)
acpi_os_install_interrupt_handler
(
u32
gsi
,
OSD_HANDLER
handler
,
void
*
context
)
{
{
unsigned
int
irq
;
/*
/*
* Ignore the
irq
from the core, and use the value in our copy of the
* Ignore the
GSI
from the core, and use the value in our copy of the
* FADT. It may not be the same if an interrupt source override exists
* FADT. It may not be the same if an interrupt source override exists
* for the SCI.
* for the SCI.
*/
*/
irq
=
acpi_fadt
.
sci_int
;
gsi
=
acpi_fadt
.
sci_int
;
if
(
acpi_gsi_to_irq
(
gsi
,
&
irq
)
<
0
)
{
#if defined(CONFIG_IA64) || defined(CONFIG_PCI_USE_VECTOR)
printk
(
KERN_ERR
PREFIX
"SCI (ACPI GSI %d) not registered
\n
"
,
irq
=
acpi_irq_to_vector
(
irq
);
gsi
);
if
(
irq
<
0
)
{
printk
(
KERN_ERR
PREFIX
"SCI (ACPI interrupt %d) not registered
\n
"
,
acpi_fadt
.
sci_int
);
return
AE_OK
;
return
AE_OK
;
}
}
#endif
acpi_irq_handler
=
handler
;
acpi_irq_handler
=
handler
;
acpi_irq_context
=
context
;
acpi_irq_context
=
context
;
if
(
request_irq
(
irq
,
acpi_irq
,
SA_SHIRQ
,
"acpi"
,
acpi_irq
))
{
if
(
request_irq
(
irq
,
acpi_irq
,
SA_SHIRQ
,
"acpi"
,
acpi_irq
))
{
...
@@ -272,9 +272,6 @@ acpi_status
...
@@ -272,9 +272,6 @@ acpi_status
acpi_os_remove_interrupt_handler
(
u32
irq
,
OSD_HANDLER
handler
)
acpi_os_remove_interrupt_handler
(
u32
irq
,
OSD_HANDLER
handler
)
{
{
if
(
irq
)
{
if
(
irq
)
{
#if defined(CONFIG_IA64) || defined(CONFIG_PCI_USE_VECTOR)
irq
=
acpi_irq_to_vector
(
irq
);
#endif
free_irq
(
irq
,
acpi_irq
);
free_irq
(
irq
,
acpi_irq
);
acpi_irq_handler
=
NULL
;
acpi_irq_handler
=
NULL
;
acpi_irq_irq
=
0
;
acpi_irq_irq
=
0
;
...
...
drivers/acpi/pci_irq.c
View file @
4774cf7a
...
@@ -368,7 +368,7 @@ acpi_pci_irq_enable (
...
@@ -368,7 +368,7 @@ acpi_pci_irq_enable (
if
(
!
irq
)
{
if
(
!
irq
)
{
printk
(
KERN_WARNING
PREFIX
"No IRQ known for interrupt pin %c of device %s"
,
(
'A'
+
pin
),
pci_name
(
dev
));
printk
(
KERN_WARNING
PREFIX
"No IRQ known for interrupt pin %c of device %s"
,
(
'A'
+
pin
),
pci_name
(
dev
));
/* Interrupt Line values above 0xF are forbidden */
/* Interrupt Line values above 0xF are forbidden */
if
(
dev
->
irq
&&
dev
->
irq
>=
0xF
)
{
if
(
dev
->
irq
&&
(
dev
->
irq
<=
0xF
)
)
{
printk
(
" - using IRQ %d
\n
"
,
dev
->
irq
);
printk
(
" - using IRQ %d
\n
"
,
dev
->
irq
);
return_VALUE
(
dev
->
irq
);
return_VALUE
(
dev
->
irq
);
}
}
...
...
drivers/acpi/pci_link.c
View file @
4774cf7a
This diff is collapsed.
Click to expand it.
drivers/acpi/pci_root.c
View file @
4774cf7a
...
@@ -119,6 +119,7 @@ acpi_pci_root_add (
...
@@ -119,6 +119,7 @@ acpi_pci_root_add (
{
{
int
result
=
0
;
int
result
=
0
;
struct
acpi_pci_root
*
root
=
NULL
;
struct
acpi_pci_root
*
root
=
NULL
;
struct
acpi_pci_root
*
tmp
;
acpi_status
status
=
AE_OK
;
acpi_status
status
=
AE_OK
;
unsigned
long
value
=
0
;
unsigned
long
value
=
0
;
acpi_handle
handle
=
NULL
;
acpi_handle
handle
=
NULL
;
...
@@ -186,6 +187,13 @@ acpi_pci_root_add (
...
@@ -186,6 +187,13 @@ acpi_pci_root_add (
goto
end
;
goto
end
;
}
}
/* Some systems have wrong _BBN */
list_for_each_entry
(
tmp
,
&
acpi_pci_roots
,
node
)
{
if
((
tmp
->
id
.
segment
==
root
->
id
.
segment
)
&&
(
tmp
->
id
.
bus
==
root
->
id
.
bus
))
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Wrong _BBN value, please reboot and using option 'pci=noacpi'
\n
"
));
}
/*
/*
* Device & Function
* Device & Function
* -----------------
* -----------------
...
@@ -272,7 +280,7 @@ static int __init acpi_pci_root_init (void)
...
@@ -272,7 +280,7 @@ static int __init acpi_pci_root_init (void)
{
{
ACPI_FUNCTION_TRACE
(
"acpi_pci_root_init"
);
ACPI_FUNCTION_TRACE
(
"acpi_pci_root_init"
);
if
(
acpi_disabled
)
if
(
acpi_
pci_
disabled
)
return_VALUE
(
0
);
return_VALUE
(
0
);
/* DEBUG:
/* DEBUG:
...
...
drivers/acpi/processor.c
View file @
4774cf7a
...
@@ -1190,6 +1190,7 @@ acpi_cpufreq_add_file (
...
@@ -1190,6 +1190,7 @@ acpi_cpufreq_add_file (
entry
->
proc_fops
=
&
acpi_processor_perf_fops
;
entry
->
proc_fops
=
&
acpi_processor_perf_fops
;
entry
->
proc_fops
->
write
=
acpi_processor_write_performance
;
entry
->
proc_fops
->
write
=
acpi_processor_write_performance
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
return_VOID
;
return_VOID
;
}
}
...
@@ -2066,6 +2067,7 @@ acpi_processor_add_fs (
...
@@ -2066,6 +2067,7 @@ acpi_processor_add_fs (
if
(
!
acpi_device_dir
(
device
))
if
(
!
acpi_device_dir
(
device
))
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
}
}
acpi_device_dir
(
device
)
->
owner
=
THIS_MODULE
;
/* 'info' [R] */
/* 'info' [R] */
entry
=
create_proc_entry
(
ACPI_PROCESSOR_FILE_INFO
,
entry
=
create_proc_entry
(
ACPI_PROCESSOR_FILE_INFO
,
...
@@ -2077,6 +2079,7 @@ acpi_processor_add_fs (
...
@@ -2077,6 +2079,7 @@ acpi_processor_add_fs (
else
{
else
{
entry
->
proc_fops
=
&
acpi_processor_info_fops
;
entry
->
proc_fops
=
&
acpi_processor_info_fops
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
/* 'power' [R] */
/* 'power' [R] */
...
@@ -2089,6 +2092,7 @@ acpi_processor_add_fs (
...
@@ -2089,6 +2092,7 @@ acpi_processor_add_fs (
else
{
else
{
entry
->
proc_fops
=
&
acpi_processor_power_fops
;
entry
->
proc_fops
=
&
acpi_processor_power_fops
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
/* 'throttling' [R/W] */
/* 'throttling' [R/W] */
...
@@ -2102,6 +2106,7 @@ acpi_processor_add_fs (
...
@@ -2102,6 +2106,7 @@ acpi_processor_add_fs (
entry
->
proc_fops
=
&
acpi_processor_throttling_fops
;
entry
->
proc_fops
=
&
acpi_processor_throttling_fops
;
entry
->
proc_fops
->
write
=
acpi_processor_write_throttling
;
entry
->
proc_fops
->
write
=
acpi_processor_write_throttling
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
/* 'limit' [R/W] */
/* 'limit' [R/W] */
...
@@ -2115,6 +2120,7 @@ acpi_processor_add_fs (
...
@@ -2115,6 +2120,7 @@ acpi_processor_add_fs (
entry
->
proc_fops
=
&
acpi_processor_limit_fops
;
entry
->
proc_fops
=
&
acpi_processor_limit_fops
;
entry
->
proc_fops
->
write
=
acpi_processor_write_limit
;
entry
->
proc_fops
->
write
=
acpi_processor_write_limit
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
return_VALUE
(
0
);
return_VALUE
(
0
);
...
@@ -2128,6 +2134,11 @@ acpi_processor_remove_fs (
...
@@ -2128,6 +2134,11 @@ acpi_processor_remove_fs (
ACPI_FUNCTION_TRACE
(
"acpi_processor_remove_fs"
);
ACPI_FUNCTION_TRACE
(
"acpi_processor_remove_fs"
);
if
(
acpi_device_dir
(
device
))
{
if
(
acpi_device_dir
(
device
))
{
remove_proc_entry
(
ACPI_PROCESSOR_FILE_INFO
,
acpi_device_dir
(
device
));
remove_proc_entry
(
ACPI_PROCESSOR_FILE_POWER
,
acpi_device_dir
(
device
));
remove_proc_entry
(
ACPI_PROCESSOR_FILE_THROTTLING
,
acpi_device_dir
(
device
));
remove_proc_entry
(
ACPI_PROCESSOR_FILE_LIMIT
,
acpi_device_dir
(
device
));
remove_proc_entry
(
acpi_device_bid
(
device
),
acpi_processor_dir
);
remove_proc_entry
(
acpi_device_bid
(
device
),
acpi_processor_dir
);
acpi_device_dir
(
device
)
=
NULL
;
acpi_device_dir
(
device
)
=
NULL
;
}
}
...
@@ -2385,6 +2396,7 @@ acpi_processor_init (void)
...
@@ -2385,6 +2396,7 @@ acpi_processor_init (void)
acpi_processor_dir
=
proc_mkdir
(
ACPI_PROCESSOR_CLASS
,
acpi_root_dir
);
acpi_processor_dir
=
proc_mkdir
(
ACPI_PROCESSOR_CLASS
,
acpi_root_dir
);
if
(
!
acpi_processor_dir
)
if
(
!
acpi_processor_dir
)
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_processor_dir
->
owner
=
THIS_MODULE
;
result
=
acpi_bus_register_driver
(
&
acpi_processor_driver
);
result
=
acpi_bus_register_driver
(
&
acpi_processor_driver
);
if
(
result
<
0
)
{
if
(
result
<
0
)
{
...
...
drivers/acpi/scan.c
View file @
4774cf7a
...
@@ -15,6 +15,8 @@ ACPI_MODULE_NAME ("scan")
...
@@ -15,6 +15,8 @@ ACPI_MODULE_NAME ("scan")
#define STRUCT_TO_INT(s) (*((int*)&s))
#define STRUCT_TO_INT(s) (*((int*)&s))
extern
struct
acpi_device
*
acpi_root
;
extern
struct
acpi_device
*
acpi_root
;
struct
acpi_device
*
acpi_fixed_pwr_button
;
struct
acpi_device
*
acpi_fixed_sleep_button
;
#define ACPI_BUS_CLASS "system_bus"
#define ACPI_BUS_CLASS "system_bus"
...
@@ -900,10 +902,13 @@ acpi_bus_scan_fixed (
...
@@ -900,10 +902,13 @@ acpi_bus_scan_fixed (
struct
acpi_device
*
root
)
struct
acpi_device
*
root
)
{
{
int
result
=
0
;
int
result
=
0
;
struct
acpi_device
*
device
=
NULL
;
ACPI_FUNCTION_TRACE
(
"acpi_bus_scan_fixed"
);
ACPI_FUNCTION_TRACE
(
"acpi_bus_scan_fixed"
);
acpi_fixed_pwr_button
=
NULL
;
acpi_fixed_sleep_button
=
NULL
;
if
(
!
root
)
if
(
!
root
)
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
...
@@ -911,11 +916,11 @@ acpi_bus_scan_fixed (
...
@@ -911,11 +916,11 @@ acpi_bus_scan_fixed (
* Enumerate all fixed-feature devices.
* Enumerate all fixed-feature devices.
*/
*/
if
(
acpi_fadt
.
pwr_button
==
0
)
if
(
acpi_fadt
.
pwr_button
==
0
)
result
=
acpi_bus_add
(
&
device
,
acpi_root
,
result
=
acpi_bus_add
(
&
acpi_fixed_pwr_button
,
acpi_root
,
NULL
,
ACPI_BUS_TYPE_POWER_BUTTON
);
NULL
,
ACPI_BUS_TYPE_POWER_BUTTON
);
if
(
acpi_fadt
.
sleep_button
==
0
)
if
(
acpi_fadt
.
sleep_button
==
0
)
result
=
acpi_bus_add
(
&
device
,
acpi_root
,
result
=
acpi_bus_add
(
&
acpi_fixed_sleep_button
,
acpi_root
,
NULL
,
ACPI_BUS_TYPE_SLEEP_BUTTON
);
NULL
,
ACPI_BUS_TYPE_SLEEP_BUTTON
);
return_VALUE
(
result
);
return_VALUE
(
result
);
...
...
drivers/acpi/thermal.c
View file @
4774cf7a
...
@@ -1060,6 +1060,7 @@ acpi_thermal_add_fs (
...
@@ -1060,6 +1060,7 @@ acpi_thermal_add_fs (
acpi_thermal_dir
);
acpi_thermal_dir
);
if
(
!
acpi_device_dir
(
device
))
if
(
!
acpi_device_dir
(
device
))
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_device_dir
(
device
)
->
owner
=
THIS_MODULE
;
}
}
/* 'state' [R] */
/* 'state' [R] */
...
@@ -1072,6 +1073,7 @@ acpi_thermal_add_fs (
...
@@ -1072,6 +1073,7 @@ acpi_thermal_add_fs (
else
{
else
{
entry
->
proc_fops
=
&
acpi_thermal_state_fops
;
entry
->
proc_fops
=
&
acpi_thermal_state_fops
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
/* 'temperature' [R] */
/* 'temperature' [R] */
...
@@ -1084,6 +1086,7 @@ acpi_thermal_add_fs (
...
@@ -1084,6 +1086,7 @@ acpi_thermal_add_fs (
else
{
else
{
entry
->
proc_fops
=
&
acpi_thermal_temp_fops
;
entry
->
proc_fops
=
&
acpi_thermal_temp_fops
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
/* 'trip_points' [R/W] */
/* 'trip_points' [R/W] */
...
@@ -1096,6 +1099,7 @@ acpi_thermal_add_fs (
...
@@ -1096,6 +1099,7 @@ acpi_thermal_add_fs (
else
{
else
{
entry
->
proc_fops
=
&
acpi_thermal_trip_fops
;
entry
->
proc_fops
=
&
acpi_thermal_trip_fops
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
/* 'cooling_mode' [R/W] */
/* 'cooling_mode' [R/W] */
...
@@ -1108,6 +1112,7 @@ acpi_thermal_add_fs (
...
@@ -1108,6 +1112,7 @@ acpi_thermal_add_fs (
else
{
else
{
entry
->
proc_fops
=
&
acpi_thermal_cooling_fops
;
entry
->
proc_fops
=
&
acpi_thermal_cooling_fops
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
/* 'polling_frequency' [R/W] */
/* 'polling_frequency' [R/W] */
...
@@ -1120,6 +1125,7 @@ acpi_thermal_add_fs (
...
@@ -1120,6 +1125,7 @@ acpi_thermal_add_fs (
else
{
else
{
entry
->
proc_fops
=
&
acpi_thermal_polling_fops
;
entry
->
proc_fops
=
&
acpi_thermal_polling_fops
;
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
data
=
acpi_driver_data
(
device
);
entry
->
owner
=
THIS_MODULE
;
}
}
return_VALUE
(
0
);
return_VALUE
(
0
);
...
@@ -1338,6 +1344,7 @@ acpi_thermal_init (void)
...
@@ -1338,6 +1344,7 @@ acpi_thermal_init (void)
acpi_thermal_dir
=
proc_mkdir
(
ACPI_THERMAL_CLASS
,
acpi_root_dir
);
acpi_thermal_dir
=
proc_mkdir
(
ACPI_THERMAL_CLASS
,
acpi_root_dir
);
if
(
!
acpi_thermal_dir
)
if
(
!
acpi_thermal_dir
)
return_VALUE
(
-
ENODEV
);
return_VALUE
(
-
ENODEV
);
acpi_thermal_dir
->
owner
=
THIS_MODULE
;
result
=
acpi_bus_register_driver
(
&
acpi_thermal_driver
);
result
=
acpi_bus_register_driver
(
&
acpi_thermal_driver
);
if
(
result
<
0
)
{
if
(
result
<
0
)
{
...
...
drivers/acpi/toshiba_acpi.c
View file @
4774cf7a
...
@@ -502,6 +502,8 @@ add_device(void)
...
@@ -502,6 +502,8 @@ add_device(void)
proc
=
create_proc_read_entry
(
item
->
name
,
proc
=
create_proc_read_entry
(
item
->
name
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
toshiba_proc_dir
,
(
read_proc_t
*
)
dispatch_read
,
item
);
toshiba_proc_dir
,
(
read_proc_t
*
)
dispatch_read
,
item
);
if
(
proc
)
proc
->
owner
=
THIS_MODULE
;
if
(
proc
&&
item
->
write_func
)
if
(
proc
&&
item
->
write_func
)
proc
->
write_proc
=
(
write_proc_t
*
)
dispatch_write
;
proc
->
write_proc
=
(
write_proc_t
*
)
dispatch_write
;
}
}
...
@@ -525,6 +527,8 @@ toshiba_acpi_init(void)
...
@@ -525,6 +527,8 @@ toshiba_acpi_init(void)
acpi_status
status
=
AE_OK
;
acpi_status
status
=
AE_OK
;
u32
hci_result
;
u32
hci_result
;
if
(
acpi_disabled
)
return
-
ENODEV
;
/* simple device detection: look for HCI method */
/* simple device detection: look for HCI method */
if
(
is_valid_acpi_path
(
METHOD_HCI_1
))
if
(
is_valid_acpi_path
(
METHOD_HCI_1
))
method_hci
=
METHOD_HCI_1
;
method_hci
=
METHOD_HCI_1
;
...
@@ -547,6 +551,7 @@ toshiba_acpi_init(void)
...
@@ -547,6 +551,7 @@ toshiba_acpi_init(void)
if
(
!
toshiba_proc_dir
)
{
if
(
!
toshiba_proc_dir
)
{
status
=
AE_ERROR
;
status
=
AE_ERROR
;
}
else
{
}
else
{
toshiba_proc_dir
->
owner
=
THIS_MODULE
;
status
=
add_device
();
status
=
add_device
();
if
(
ACPI_FAILURE
(
status
))
if
(
ACPI_FAILURE
(
status
))
remove_proc_entry
(
PROC_TOSHIBA
,
acpi_root_dir
);
remove_proc_entry
(
PROC_TOSHIBA
,
acpi_root_dir
);
...
...
include/acpi/acpiosxf.h
View file @
4774cf7a
...
@@ -188,14 +188,14 @@ acpi_os_get_physical_address (
...
@@ -188,14 +188,14 @@ acpi_os_get_physical_address (
acpi_status
acpi_status
acpi_os_install_interrupt_handler
(
acpi_os_install_interrupt_handler
(
u32
interrupt_number
,
u32
gsi
,
OSD_HANDLER
service_routine
,
OSD_HANDLER
service_routine
,
void
*
context
);
void
*
context
);
acpi_status
acpi_status
acpi_os_remove_interrupt_handler
(
acpi_os_remove_interrupt_handler
(
u32
interrupt_number
,
u32
interrupt_number
,
OSD_HANDLER
service_routine
);
OSD_HANDLER
service_routine
);
/*
/*
...
...
include/asm-i386/acpi.h
View file @
4774cf7a
...
@@ -109,7 +109,14 @@ extern int acpi_noirq;
...
@@ -109,7 +109,14 @@ extern int acpi_noirq;
extern
int
acpi_strict
;
extern
int
acpi_strict
;
extern
int
acpi_disabled
;
extern
int
acpi_disabled
;
extern
int
acpi_ht
;
extern
int
acpi_ht
;
static
inline
void
disable_acpi
(
void
)
{
acpi_disabled
=
1
;
acpi_ht
=
0
;
}
extern
int
acpi_pci_disabled
;
static
inline
void
disable_acpi
(
void
)
{
acpi_disabled
=
1
;
acpi_ht
=
0
;
acpi_pci_disabled
=
1
;
acpi_noirq
=
1
;
}
/* Fixmap pages to reserve for ACPI boot-time tables (see fixmap.h) */
/* Fixmap pages to reserve for ACPI boot-time tables (see fixmap.h) */
#define FIX_ACPI_PAGES 4
#define FIX_ACPI_PAGES 4
...
@@ -118,6 +125,7 @@ extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
...
@@ -118,6 +125,7 @@ extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
#ifdef CONFIG_X86_IO_APIC
#ifdef CONFIG_X86_IO_APIC
extern
int
skip_ioapic_setup
;
extern
int
skip_ioapic_setup
;
extern
int
acpi_irq_to_vector
(
u32
irq
);
/* deprecated in favor of acpi_gsi_to_irq */
extern
int
acpi_irq_to_vector
(
u32
irq
);
/* deprecated in favor of acpi_gsi_to_irq */
extern
int
acpi_skip_timer_override
;
static
inline
void
disable_ioapic_setup
(
void
)
static
inline
void
disable_ioapic_setup
(
void
)
{
{
...
@@ -143,9 +151,15 @@ static inline void disable_ioapic_setup(void)
...
@@ -143,9 +151,15 @@ static inline void disable_ioapic_setup(void)
#ifdef CONFIG_ACPI_PCI
#ifdef CONFIG_ACPI_PCI
static
inline
void
acpi_noirq_set
(
void
)
{
acpi_noirq
=
1
;
}
static
inline
void
acpi_noirq_set
(
void
)
{
acpi_noirq
=
1
;
}
static
inline
void
acpi_disable_pci
(
void
)
{
acpi_pci_disabled
=
1
;
acpi_noirq_set
();
}
extern
int
acpi_irq_balance_set
(
char
*
str
);
extern
int
acpi_irq_balance_set
(
char
*
str
);
#else
#else
static
inline
void
acpi_noirq_set
(
void
)
{
}
static
inline
void
acpi_noirq_set
(
void
)
{
}
static
inline
void
acpi_disable_pci
(
void
)
{
}
static
inline
int
acpi_irq_balance_set
(
char
*
str
)
{
return
0
;
}
static
inline
int
acpi_irq_balance_set
(
char
*
str
)
{
return
0
;
}
#endif
#endif
...
...
include/asm-ia64/acpi.h
View file @
4774cf7a
...
@@ -89,6 +89,7 @@ ia64_acpi_release_global_lock (unsigned int *lock)
...
@@ -89,6 +89,7 @@ ia64_acpi_release_global_lock (unsigned int *lock)
((Acq) = ia64_acpi_release_global_lock((unsigned int *) GLptr))
((Acq) = ia64_acpi_release_global_lock((unsigned int *) GLptr))
#define acpi_disabled 0
/* ACPI always enabled on IA64 */
#define acpi_disabled 0
/* ACPI always enabled on IA64 */
#define acpi_pci_disabled 0
/* ACPI PCI always enabled on IA64 */
#define acpi_strict 1
/* no ACPI spec workarounds on IA64 */
#define acpi_strict 1
/* no ACPI spec workarounds on IA64 */
static
inline
void
disable_acpi
(
void
)
{
}
static
inline
void
disable_acpi
(
void
)
{
}
...
...
include/asm-x86_64/acpi.h
View file @
4774cf7a
...
@@ -106,8 +106,15 @@ extern int acpi_ioapic;
...
@@ -106,8 +106,15 @@ extern int acpi_ioapic;
extern
int
acpi_noirq
;
extern
int
acpi_noirq
;
extern
int
acpi_strict
;
extern
int
acpi_strict
;
extern
int
acpi_disabled
;
extern
int
acpi_disabled
;
extern
int
acpi_pci_disabled
;
extern
int
acpi_ht
;
extern
int
acpi_ht
;
static
inline
void
disable_acpi
(
void
)
{
acpi_disabled
=
1
;
acpi_ht
=
0
;
}
static
inline
void
disable_acpi
(
void
)
{
acpi_disabled
=
1
;
acpi_ht
=
0
;
acpi_pci_disabled
=
1
;
acpi_noirq
=
1
;
}
/* Fixmap pages to reserve for ACPI boot-time tables (see fixmap.h) */
/* Fixmap pages to reserve for ACPI boot-time tables (see fixmap.h) */
#define FIX_ACPI_PAGES 4
#define FIX_ACPI_PAGES 4
...
@@ -121,9 +128,15 @@ extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
...
@@ -121,9 +128,15 @@ extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
#ifdef CONFIG_ACPI_PCI
#ifdef CONFIG_ACPI_PCI
static
inline
void
acpi_noirq_set
(
void
)
{
acpi_noirq
=
1
;
}
static
inline
void
acpi_noirq_set
(
void
)
{
acpi_noirq
=
1
;
}
static
inline
void
acpi_disable_pci
(
void
)
{
acpi_pci_disabled
=
1
;
acpi_noirq_set
();
}
extern
int
acpi_irq_balance_set
(
char
*
str
);
extern
int
acpi_irq_balance_set
(
char
*
str
);
#else
#else
static
inline
void
acpi_noirq_set
(
void
)
{
}
static
inline
void
acpi_noirq_set
(
void
)
{
}
static
inline
void
acpi_disable_pci
(
void
)
{
}
static
inline
int
acpi_irq_balance_set
(
char
*
str
)
{
return
0
;
}
static
inline
int
acpi_irq_balance_set
(
char
*
str
)
{
return
0
;
}
#endif
#endif
...
@@ -144,6 +157,7 @@ extern void acpi_reserve_bootmem(void);
...
@@ -144,6 +157,7 @@ extern void acpi_reserve_bootmem(void);
#define boot_cpu_physical_apicid boot_cpu_id
#define boot_cpu_physical_apicid boot_cpu_id
extern
int
acpi_disabled
;
extern
int
acpi_disabled
;
extern
int
acpi_pci_disabled
;
#define dmi_broken (0)
#define dmi_broken (0)
#define BROKEN_ACPI_Sx 0x0001
#define BROKEN_ACPI_Sx 0x0001
...
...
include/linux/acpi.h
View file @
4774cf7a
...
@@ -438,6 +438,7 @@ struct pci_dev;
...
@@ -438,6 +438,7 @@ struct pci_dev;
int
acpi_pci_irq_enable
(
struct
pci_dev
*
dev
);
int
acpi_pci_irq_enable
(
struct
pci_dev
*
dev
);
int
acpi_pci_irq_init
(
void
);
int
acpi_pci_irq_init
(
void
);
int
acpi_gsi_to_irq
(
u32
gsi
,
unsigned
int
*
irq
);
struct
acpi_pci_driver
{
struct
acpi_pci_driver
{
struct
acpi_pci_driver
*
next
;
struct
acpi_pci_driver
*
next
;
...
...
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