summaryrefslogtreecommitdiffstats
path: root/arch/m68k/mac/oss.c
diff options
context:
space:
mode:
authorFinn Thain <fthain@telegraphics.com.au>2007-05-01 22:32:56 +0200
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-04 17:59:07 -0700
commit67dfb153a352e57e71404d550be7eb60d15d7f2d (patch)
tree675db4da976dedeba9c9ffbceb816f56701e9f94 /arch/m68k/mac/oss.c
parent647b804c8237aa35e19caf8e11ea8d5565107b0e (diff)
downloadlinux-67dfb153a352e57e71404d550be7eb60d15d7f2d.tar.gz
linux-67dfb153a352e57e71404d550be7eb60d15d7f2d.tar.bz2
linux-67dfb153a352e57e71404d550be7eb60d15d7f2d.zip
m68k: Mac IRQ prep
Make sure that there are no slot IRQs asserted before leaving the nubus handler. If there are and we don't then the nubus gets wedged because this prevents a CA1 transition, which means no more nubus IRQs. Make the interrupt dispatch loops terminate sooner. Explicitly initialise the VIA latches to make the code more easily understood. Also some cleanups. Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/m68k/mac/oss.c')
-rw-r--r--arch/m68k/mac/oss.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/m68k/mac/oss.c b/arch/m68k/mac/oss.c
index 603d5cb72891..6399883ae742 100644
--- a/arch/m68k/mac/oss.c
+++ b/arch/m68k/mac/oss.c
@@ -143,14 +143,18 @@ irqreturn_t oss_nubus_irq(int irq, void *dev_id)
#endif
/* There are only six slots on the OSS, not seven */
- for (i = 0, irq_bit = 1 ; i < 6 ; i++, irq_bit <<= 1) {
+ i = 6;
+ irq_bit = 0x40;
+ do {
+ --i;
+ irq_bit >>= 1;
if (events & irq_bit) {
oss->irq_level[i] = OSS_IRQLEV_DISABLED;
oss->irq_pending &= ~irq_bit;
m68k_handle_int(NUBUS_SOURCE_BASE + i);
oss->irq_level[i] = OSS_IRQLEV_NUBUS;
}
- }
+ } while(events & (irq_bit - 1));
return IRQ_HANDLED;
}