summaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel/i8259.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-06 14:35:30 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-06 14:35:30 -0800
commite503606c5b7687842beb8fca46b827606ae40c63 (patch)
tree37003f6e8889d39fe64615809b3fffa395ce61cb /arch/mips/kernel/i8259.c
parent76c329563c5b8663ef27eb1bd195885ab826cbd0 (diff)
parentd390008ebf42bdfda106e9de2b2d0abcc9858e26 (diff)
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (40 commits) [MIPS] Yosemite: Fix missing parens in SERIAL_READ_1 macro [MIPS] Fix warnings in run_uncached on 32bit kernel [MIPS] Comment fix [MIPS] MT: Nuke duplicate mips_mt_regdump() prototype. [MIPS] Alchemy: Fix PCI-memory access [MIPS] Move .set reorder out of conditional code [MIPS] Check FCSR for pending interrupts before restoring from a context. [MIPS] Jaguar ATX: Fix large number of warnings. [MIPS] Jaguar: Fix MAC address detection after platform_device conversion. [MIPS] SMTC: Make a bunch of functions and variables static. [MIPS] Use compat_sys_pselect6 [MIPS] SMTC: Cleanup idle hook invocation. [MIPS] SELinux: Add security hooks to mips-mt {get,set}affinity [MIPS] IRIX: Linux coding style cleanups. [MIPS] PB1100: Fix pile of warnings [MIPS] Alchemy: Fix bunch of warnings [MIPS] Whitespace cleanups. [MIPS] Alchemy: Fix bunch more warnings. [MIPS] Use ARRAY_SIZE macro when appropriate [MIPS] Fix some whitespace damage ...
Diffstat (limited to 'arch/mips/kernel/i8259.c')
-rw-r--r--arch/mips/kernel/i8259.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/arch/mips/kernel/i8259.c b/arch/mips/kernel/i8259.c
index b59a676c6d0..b33ba6cd7f5 100644
--- a/arch/mips/kernel/i8259.c
+++ b/arch/mips/kernel/i8259.c
@@ -54,9 +54,11 @@ static unsigned int cached_irq_mask = 0xffff;
void disable_8259A_irq(unsigned int irq)
{
- unsigned int mask = 1 << irq;
+ unsigned int mask;
unsigned long flags;
+ irq -= I8259A_IRQ_BASE;
+ mask = 1 << irq;
spin_lock_irqsave(&i8259A_lock, flags);
cached_irq_mask |= mask;
if (irq & 8)
@@ -68,9 +70,11 @@ void disable_8259A_irq(unsigned int irq)
void enable_8259A_irq(unsigned int irq)
{
- unsigned int mask = ~(1 << irq);
+ unsigned int mask;
unsigned long flags;
+ irq -= I8259A_IRQ_BASE;
+ mask = ~(1 << irq);
spin_lock_irqsave(&i8259A_lock, flags);
cached_irq_mask &= mask;
if (irq & 8)
@@ -82,10 +86,12 @@ void enable_8259A_irq(unsigned int irq)
int i8259A_irq_pending(unsigned int irq)
{
- unsigned int mask = 1 << irq;
+ unsigned int mask;
unsigned long flags;
int ret;
+ irq -= I8259A_IRQ_BASE;
+ mask = 1 << irq;
spin_lock_irqsave(&i8259A_lock, flags);
if (irq < 8)
ret = inb(PIC_MASTER_CMD) & mask;
@@ -134,9 +140,11 @@ static inline int i8259A_irq_real(unsigned int irq)
*/
void mask_and_ack_8259A(unsigned int irq)
{
- unsigned int irqmask = 1 << irq;
+ unsigned int irqmask;
unsigned long flags;
+ irq -= I8259A_IRQ_BASE;
+ irqmask = 1 << irq;
spin_lock_irqsave(&i8259A_lock, flags);
/*
* Lightweight spurious IRQ detection. We do not want
@@ -169,8 +177,8 @@ handle_real_irq:
outb(0x60+irq,PIC_MASTER_CMD); /* 'Specific EOI to master */
}
#ifdef CONFIG_MIPS_MT_SMTC
- if (irq_hwmask[irq] & ST0_IM)
- set_c0_status(irq_hwmask[irq] & ST0_IM);
+ if (irq_hwmask[irq] & ST0_IM)
+ set_c0_status(irq_hwmask[irq] & ST0_IM);
#endif /* CONFIG_MIPS_MT_SMTC */
spin_unlock_irqrestore(&i8259A_lock, flags);
return;
@@ -322,8 +330,8 @@ void __init init_i8259_irqs (void)
init_8259A(0);
- for (i = 0; i < 16; i++)
+ for (i = I8259A_IRQ_BASE; i < I8259A_IRQ_BASE + 16; i++)
set_irq_chip_and_handler(i, &i8259A_chip, handle_level_irq);
- setup_irq(PIC_CASCADE_IR, &irq2);
+ setup_irq(I8259A_IRQ_BASE + PIC_CASCADE_IR, &irq2);
}