summary refs log tree commit diff
path: root/arch/m68k/mac/macints.c
diff options
context:
space:
mode:
authorFinn Thain <fthain@telegraphics.com.au>2011-10-24 01:11:17 +1100
committerGeert Uytterhoeven <geert@linux-m68k.org>2011-12-10 19:52:47 +0100
commitc4af5da7f24ff1bf60db2d6ff3e9d9bd912ca47a (patch)
tree2f653a61672f5720e436411526ab6339838fb3bc /arch/m68k/mac/macints.c
parent8d9f014ad16711d79c8a575f2d3d009d2a16c7b7 (diff)
downloadlinux-c4af5da7f24ff1bf60db2d6ff3e9d9bd912ca47a.tar.gz
m68k/mac: fix nubus slot irq disable and shutdown
Improve NuBus slot interrupt handling code and documentation. This patch fixes the NuBus NIC (mac8390) in my Quadra 700.

Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Diffstat (limited to 'arch/m68k/mac/macints.c')
-rw-r--r--arch/m68k/mac/macints.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/m68k/mac/macints.c b/arch/m68k/mac/macints.c
index 41dd164aac27..74f5a97c9860 100644
--- a/arch/m68k/mac/macints.c
+++ b/arch/m68k/mac/macints.c
@@ -151,10 +151,15 @@ irqreturn_t mac_debug_handler(int, void *);
 
 /* #define DEBUG_MACINTS */
 
+static unsigned int mac_irq_startup(struct irq_data *);
+static void mac_irq_shutdown(struct irq_data *);
+
 static struct irq_chip mac_irq_chip = {
 	.name		= "mac",
 	.irq_enable	= mac_irq_enable,
 	.irq_disable	= mac_irq_disable,
+	.irq_startup	= mac_irq_startup,
+	.irq_shutdown	= mac_irq_shutdown,
 };
 
 void __init mac_init_IRQ(void)
@@ -274,6 +279,28 @@ void mac_irq_disable(struct irq_data *data)
 	}
 }
 
+static unsigned int mac_irq_startup(struct irq_data *data)
+{
+	int irq = data->irq;
+
+	if (IRQ_SRC(irq) == 7 && !oss_present)
+		via_nubus_irq_startup(irq);
+	else
+		mac_irq_enable(data);
+
+	return 0;
+}
+
+static void mac_irq_shutdown(struct irq_data *data)
+{
+	int irq = data->irq;
+
+	if (IRQ_SRC(irq) == 7 && !oss_present)
+		via_nubus_irq_shutdown(irq);
+	else
+		mac_irq_disable(data);
+}
+
 static int num_debug[8];
 
 irqreturn_t mac_debug_handler(int irq, void *dev_id)