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
30066557
Commit
30066557
authored
Apr 23, 2004
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge intel.com:/home/lenb/src/linux-acpi-test-2.6.5
into intel.com:/home/lenb/src/linux-acpi-test-2.6.6
parents
7ce42ae1
f8bdcc51
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
212 additions
and
166 deletions
+212
-166
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
+73
-73
arch/i386/kernel/io_apic.c
arch/i386/kernel/io_apic.c
+6
-10
arch/i386/kernel/mpparse.c
arch/i386/kernel/mpparse.c
+13
-22
arch/i386/kernel/setup.c
arch/i386/kernel/setup.c
+9
-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/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/osl.c
drivers/acpi/osl.c
+2
-1
drivers/acpi/pci_link.c
drivers/acpi/pci_link.c
+1
-1
drivers/acpi/pci_root.c
drivers/acpi/pci_root.c
+9
-1
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
No files found.
Documentation/kernel-parameters.txt
View file @
30066557
...
...
@@ -91,13 +91,14 @@ running once the system is up.
acpi= [HW,ACPI] Advanced Configuration and Power Interface
Format: { force | off | ht | strict }
force -- enables ACPI for systems with default off
off -- disabled ACPI for systems with default on
force -- enable ACPI if default was off
off -- disable ACPI if default was on
noirq -- do not use ACPI for IRQ routing
ht -- run only enough ACPI to enable Hyper Threading
strict -- Be less tolerant of platforms that are not
strictly ACPI specification compliant.
See also Documentation/pm.txt
.
See also Documentation/pm.txt
, pci=noacpi
acpi_sleep= [HW,ACPI] Sleep options
Format: { s3_bios, s3_mode }
...
...
@@ -122,6 +123,10 @@ running once the system is up.
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]
Format: <io>,<irq>,<dma>,<dma2>
See also Documentation/sound/oss/AD1816.
...
...
@@ -831,7 +836,8 @@ running once the system is up.
and Omnibook XE3 notebooks. This will
have no effect if ACPI IRQ routing is
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
...
...
arch/i386/kernel/acpi/boot.c
View file @
30066557
...
...
@@ -53,7 +53,13 @@ static inline int ioapic_setup_disabled(void) { return 0; }
#define PREFIX "ACPI: "
#ifdef CONFIG_ACPI_PCI
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_lapic
;
...
...
@@ -62,6 +68,7 @@ int acpi_strict;
acpi_interrupt_flags
acpi_sci_flags
__initdata
;
int
acpi_sci_override_gsi
__initdata
;
int
acpi_skip_timer_override
__initdata
;
#ifdef CONFIG_X86_LOCAL_APIC
static
u64
acpi_lapic_addr
__initdata
=
APIC_DEFAULT_PHYS_BASE
;
...
...
@@ -329,6 +336,12 @@ acpi_parse_int_src_ovr (
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
(
intsrc
->
bus_irq
,
intsrc
->
flags
.
polarity
,
...
...
@@ -653,9 +666,6 @@ acpi_parse_madt_ioapic_entries(void)
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
);
if
(
count
<
0
)
{
printk
(
KERN_ERR
PREFIX
"Error parsing interrupt source overrides entry
\n
"
);
...
...
@@ -670,6 +680,9 @@ acpi_parse_madt_ioapic_entries(void)
if
(
!
acpi_sci_override_gsi
)
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
);
if
(
count
<
0
)
{
printk
(
KERN_ERR
PREFIX
"Error parsing NMI SRC entry
\n
"
);
...
...
arch/i386/kernel/dmi_scan.c
View file @
30066557
...
...
@@ -412,30 +412,6 @@ static __init int swab_apm_power_in_minutes(struct dmi_blacklist *d)
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
*/
...
...
@@ -555,14 +531,33 @@ static __init __attribute__((unused)) int force_acpi_ht(struct dmi_blacklist *d)
#endif
#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
)
{
printk
(
KERN_NOTICE
"%s detected: force use of pci=noacpi
\n
"
,
d
->
ident
);
acpi_
noirq_set
();
acpi_
disable_pci
();
return
0
;
}
}
#endif
/*
* 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
;
}
/*
* Process the DMI blacklists
*/
...
...
@@ -815,52 +810,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
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 */
MATCH
(
DMI_BIOS_VERSION
,
"ASUS K7V-RM ACPI BIOS Revision 1003A"
),
MATCH
(
DMI_BOARD_NAME
,
"<K7V-RM>"
),
...
...
@@ -1018,6 +967,49 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH
(
DMI_BOARD_VENDOR
,
"IBM"
),
MATCH
(
DMI_PRODUCT_NAME
,
"eserver xSeries 440"
),
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
#ifdef CONFIG_ACPI_PCI
...
...
@@ -1025,13 +1017,21 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
* 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_NAME
,
"<A7V>"
),
/* newer BIOS, Revision 1011, does work */
MATCH
(
DMI_BIOS_VERSION
,
"ASUS A7V ACPI BIOS Revision 1007"
),
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
{
NULL
,
}
...
...
arch/i386/kernel/io_apic.c
View file @
30066557
...
...
@@ -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.
* Linux doesn't really care, as it's not actually used
* 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)
...
...
@@ -2285,7 +2277,11 @@ void __init setup_IO_APIC(void)
{
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
"
);
/*
...
...
arch/i386/kernel/mpparse.c
View file @
30066557
...
...
@@ -929,8 +929,6 @@ void __init mp_override_legacy_irq (
u32
gsi
)
{
struct
mpc_config_intsrc
intsrc
;
int
i
=
0
;
int
found
=
0
;
int
ioapic
=
-
1
;
int
pin
=
-
1
;
...
...
@@ -963,23 +961,9 @@ void __init mp_override_legacy_irq (
(
intsrc
.
mpc_irqflag
>>
2
)
&
3
,
intsrc
.
mpc_srcbus
,
intsrc
.
mpc_srcbusirq
,
intsrc
.
mpc_dstapic
,
intsrc
.
mpc_dstirq
);
/*
* If an existing [IOAPIC.PIN -> IRQ] routing entry exists we override it.
* Otherwise create a new entry (e.g. gsi == 2).
*/
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
"
);
}
mp_irqs
[
mp_irq_entries
]
=
intsrc
;
if
(
++
mp_irq_entries
==
MAX_IRQ_SOURCES
)
panic
(
"Max # of irq sources exceeded!
\n
"
);
return
;
}
...
...
@@ -1010,13 +994,20 @@ void __init mp_config_acpi_legacy_irqs (void)
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.
*/
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
)
continue
;
/* Don't connect IRQ2
*/
if
(
i
dx
!=
mp_irq_entries
)
continue
;
/* IRQ already used
*/
intsrc
.
mpc_irqtype
=
mp_INT
;
intsrc
.
mpc_srcbusirq
=
i
;
/* Identity mapped */
...
...
arch/i386/kernel/setup.c
View file @
30066557
...
...
@@ -583,9 +583,13 @@ static void __init parse_cmdline_early (char ** cmdline_p)
disable_acpi
();
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
))
{
acpi_disable_pci
();
}
/* "acpi=noirq" disables ACPI interrupt routing */
else
if
(
!
memcmp
(
from
,
"acpi=noirq"
,
10
))
{
acpi_noirq_set
();
}
...
...
@@ -601,6 +605,9 @@ static void __init parse_cmdline_early (char ** cmdline_p)
else
if
(
!
memcmp
(
from
,
"acpi_sci=low"
,
12
))
acpi_sci_flags
.
polarity
=
3
;
else
if
(
!
memcmp
(
from
,
"acpi_skip_timer_override"
,
24
))
acpi_skip_timer_override
=
1
;
#ifdef CONFIG_X86_LOCAL_APIC
/* disable IO-APIC */
else
if
(
!
memcmp
(
from
,
"noapic"
,
6
))
...
...
arch/i386/mach-default/setup.c
View file @
30066557
...
...
@@ -7,6 +7,7 @@
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <asm/acpi.h>
#include <asm/arch_hooks.h>
/**
...
...
@@ -43,7 +44,8 @@ void __init intr_init_hook(void)
apic_intr_init
();
#endif
setup_irq
(
2
,
&
irq2
);
if
(
!
acpi_ioapic
)
setup_irq
(
2
,
&
irq2
);
}
/**
...
...
arch/i386/mach-es7000/setup.c
View file @
30066557
...
...
@@ -7,6 +7,7 @@
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <asm/acpi.h>
#include <asm/arch_hooks.h>
/**
...
...
@@ -17,8 +18,7 @@
* the "ordinary" interrupt call gates. For legacy reasons, the ISA
* interrupts should be initialised here if the machine emulates a PC
* in any way.
**/
void
__init
pre_intr_init_hook
(
void
)
**/
void
__init
pre_intr_init_hook
(
void
)
{
init_ISA_irqs
();
}
...
...
@@ -43,7 +43,8 @@ void __init intr_init_hook(void)
apic_intr_init
();
#endif
setup_irq
(
2
,
&
irq2
);
if
(
!
acpi_ioapic
)
setup_irq
(
2
,
&
irq2
);
}
/**
...
...
arch/i386/mach-voyager/setup.c
View file @
30066557
...
...
@@ -6,6 +6,7 @@
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <asm/acpi.h>
#include <asm/arch_hooks.h>
void
__init
pre_intr_init_hook
(
void
)
...
...
@@ -24,7 +25,8 @@ void __init intr_init_hook(void)
smp_intr_init
();
#endif
setup_irq
(
2
,
&
irq2
);
if
(
!
acpi_ioapic
)
setup_irq
(
2
,
&
irq2
);
}
void
__init
pre_setup_arch_hook
(
void
)
...
...
arch/i386/pci/irq.c
View file @
30066557
...
...
@@ -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
)
{
#if 0 /* Let's see what chip this is supposed to be ... */
/* We must not touch 440GX even if we have tables. 440GX has
different IRQ routing weirdness */
/* 440GX has a proprietary PIRQ router -- don't use it */
if
(
pci_find_device
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82443GX_0
,
NULL
)
||
pci_find_device
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_82443GX_2
,
NULL
))
return
0
;
#endif
switch
(
device
)
{
...
...
arch/x86_64/kernel/Makefile
View file @
30066557
...
...
@@ -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
\
x8664_ksyms.o i387.o syscall.o vsyscall.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_ACPI_BOOT)
+=
acpi/
...
...
arch/x86_64/kernel/i8259.c
View file @
30066557
...
...
@@ -13,6 +13,7 @@
#include <linux/kernel_stat.h>
#include <linux/sysdev.h>
#include <asm/acpi.h>
#include <asm/atomic.h>
#include <asm/system.h>
#include <asm/io.h>
...
...
@@ -490,5 +491,6 @@ void __init init_IRQ(void)
*/
setup_timer
();
setup_irq
(
2
,
&
irq2
);
if
(
!
acpi_ioapic
)
setup_irq
(
2
,
&
irq2
);
}
arch/x86_64/kernel/io_apic.c
View file @
30066557
...
...
@@ -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.
* Linux doesn't really care, as it's not actually used
* 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)
...
...
@@ -1759,7 +1751,11 @@ void __init setup_IO_APIC(void)
{
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
"
);
/*
...
...
arch/x86_64/kernel/mpparse.c
View file @
30066557
...
...
@@ -784,8 +784,6 @@ void __init mp_override_legacy_irq (
u32
gsi
)
{
struct
mpc_config_intsrc
intsrc
;
int
i
=
0
;
int
found
=
0
;
int
ioapic
=
-
1
;
int
pin
=
-
1
;
...
...
@@ -818,23 +816,9 @@ void __init mp_override_legacy_irq (
(
intsrc
.
mpc_irqflag
>>
2
)
&
3
,
intsrc
.
mpc_srcbus
,
intsrc
.
mpc_srcbusirq
,
intsrc
.
mpc_dstapic
,
intsrc
.
mpc_dstirq
);
/*
* If an existing [IOAPIC.PIN -> IRQ] routing entry exists we override it.
* Otherwise create a new entry (e.g. gsi == 2).
*/
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
"
);
}
mp_irqs
[
mp_irq_entries
]
=
intsrc
;
if
(
++
mp_irq_entries
==
MAX_IRQ_SOURCES
)
panic
(
"Max # of irq sources exceeded!
\n
"
);
return
;
}
...
...
@@ -865,13 +849,22 @@ void __init mp_config_acpi_legacy_irqs (void)
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.
*/
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
)
continue
;
/* Don't connect IRQ2 */
if
(
idx
!=
mp_irq_entries
)
{
printk
(
KERN_DEBUG
"ACPI: IRQ%d used by override.
\n
"
,
i
);
continue
;
/* IRQ already used */
}
intsrc
.
mpc_irqtype
=
mp_INT
;
intsrc
.
mpc_srcbusirq
=
i
;
/* Identity mapped */
...
...
arch/x86_64/kernel/setup.c
View file @
30066557
...
...
@@ -65,8 +65,8 @@ struct cpuinfo_x86 boot_cpu_data;
unsigned
long
mmu_cr4_features
;
EXPORT_SYMBOL_GPL
(
mmu_cr4_features
);
int
acpi_disabled
=
0
;
int
acpi_disabled
;
EXPORT_SYMBOL
(
acpi_disabled
);
#ifdef CONFIG_ACPI_BOOT
extern
int
__initdata
acpi_ht
;
extern
acpi_interrupt_flags
acpi_sci_flags
;
...
...
@@ -242,7 +242,7 @@ static __init void parse_cmdline_early (char ** cmdline_p)
#ifdef CONFIG_ACPI_BOOT
/* "acpi=off" disables both ACPI table parsing and interpreter init */
if
(
!
memcmp
(
from
,
"acpi=off"
,
8
))
acpi_disabled
=
1
;
disable_acpi
()
;
if
(
!
memcmp
(
from
,
"acpi=force"
,
10
))
{
/* add later when we do DMI horrors: */
...
...
@@ -256,7 +256,9 @@ static __init void parse_cmdline_early (char ** cmdline_p)
acpi_ht
=
1
;
}
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
))
acpi_sci_flags
.
trigger
=
1
;
...
...
drivers/acpi/osl.c
View file @
30066557
...
...
@@ -215,7 +215,8 @@ acpi_os_predefined_override (const struct acpi_predefined_names *init_val,
*
new_val
=
NULL
;
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
;
}
...
...
drivers/acpi/pci_link.c
View file @
30066557
...
...
@@ -793,7 +793,7 @@ static int __init acpi_pci_link_init (void)
{
ACPI_FUNCTION_TRACE
(
"acpi_pci_link_init"
);
if
(
acpi_disabled
)
if
(
acpi_
pci_
disabled
)
return_VALUE
(
0
);
acpi_link
.
count
=
0
;
...
...
drivers/acpi/pci_root.c
View file @
30066557
...
...
@@ -119,6 +119,7 @@ acpi_pci_root_add (
{
int
result
=
0
;
struct
acpi_pci_root
*
root
=
NULL
;
struct
acpi_pci_root
*
tmp
;
acpi_status
status
=
AE_OK
;
unsigned
long
value
=
0
;
acpi_handle
handle
=
NULL
;
...
...
@@ -186,6 +187,13 @@ acpi_pci_root_add (
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
* -----------------
...
...
@@ -272,7 +280,7 @@ static int __init acpi_pci_root_init (void)
{
ACPI_FUNCTION_TRACE
(
"acpi_pci_root_init"
);
if
(
acpi_disabled
)
if
(
acpi_
pci_
disabled
)
return_VALUE
(
0
);
/* DEBUG:
...
...
include/asm-i386/acpi.h
View file @
30066557
...
...
@@ -109,7 +109,14 @@ extern int acpi_noirq;
extern
int
acpi_strict
;
extern
int
acpi_disabled
;
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) */
#define FIX_ACPI_PAGES 4
...
...
@@ -118,6 +125,7 @@ extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
#ifdef CONFIG_X86_IO_APIC
extern
int
skip_ioapic_setup
;
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
)
{
...
...
@@ -143,9 +151,15 @@ static inline void disable_ioapic_setup(void)
#ifdef CONFIG_ACPI_PCI
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
);
#else
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
;
}
#endif
...
...
include/asm-ia64/acpi.h
View file @
30066557
...
...
@@ -89,6 +89,7 @@ ia64_acpi_release_global_lock (unsigned int *lock)
((Acq) = ia64_acpi_release_global_lock((unsigned int *) GLptr))
#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 */
static
inline
void
disable_acpi
(
void
)
{
}
...
...
include/asm-x86_64/acpi.h
View file @
30066557
...
...
@@ -106,8 +106,15 @@ extern int acpi_ioapic;
extern
int
acpi_noirq
;
extern
int
acpi_strict
;
extern
int
acpi_disabled
;
extern
int
acpi_pci_disabled
;
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) */
#define FIX_ACPI_PAGES 4
...
...
@@ -121,9 +128,15 @@ extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
#ifdef CONFIG_ACPI_PCI
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
);
#else
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
;
}
#endif
...
...
@@ -144,6 +157,7 @@ extern void acpi_reserve_bootmem(void);
#define boot_cpu_physical_apicid boot_cpu_id
extern
int
acpi_disabled
;
extern
int
acpi_pci_disabled
;
#define dmi_broken (0)
#define BROKEN_ACPI_Sx 0x0001
...
...
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