diff options
Diffstat (limited to 'arch/m68k/mac/baboon.c')
-rw-r--r-- | arch/m68k/mac/baboon.c | 41 |
1 files changed, 8 insertions, 33 deletions
diff --git a/arch/m68k/mac/baboon.c b/arch/m68k/mac/baboon.c index b403924a1cad..3fe0e43d44f6 100644 --- a/arch/m68k/mac/baboon.c +++ b/arch/m68k/mac/baboon.c | |||
@@ -8,13 +8,8 @@ | |||
8 | 8 | ||
9 | #include <linux/types.h> | 9 | #include <linux/types.h> |
10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
11 | #include <linux/mm.h> | ||
12 | #include <linux/delay.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/irq.h> | 11 | #include <linux/irq.h> |
15 | 12 | ||
16 | #include <asm/traps.h> | ||
17 | #include <asm/bootinfo.h> | ||
18 | #include <asm/macintosh.h> | 13 | #include <asm/macintosh.h> |
19 | #include <asm/macints.h> | 14 | #include <asm/macints.h> |
20 | #include <asm/mac_baboon.h> | 15 | #include <asm/mac_baboon.h> |
@@ -23,7 +18,6 @@ | |||
23 | 18 | ||
24 | int baboon_present; | 19 | int baboon_present; |
25 | static volatile struct baboon *baboon; | 20 | static volatile struct baboon *baboon; |
26 | static unsigned char baboon_disabled; | ||
27 | 21 | ||
28 | #if 0 | 22 | #if 0 |
29 | extern int macide_ack_intr(struct ata_channel *); | 23 | extern int macide_ack_intr(struct ata_channel *); |
@@ -89,51 +83,32 @@ static void baboon_irq(unsigned int irq, struct irq_desc *desc) | |||
89 | 83 | ||
90 | void __init baboon_register_interrupts(void) | 84 | void __init baboon_register_interrupts(void) |
91 | { | 85 | { |
92 | baboon_disabled = 0; | ||
93 | irq_set_chained_handler(IRQ_NUBUS_C, baboon_irq); | 86 | irq_set_chained_handler(IRQ_NUBUS_C, baboon_irq); |
94 | } | 87 | } |
95 | 88 | ||
96 | /* | 89 | /* |
97 | * The means for masking individual baboon interrupts remains a mystery, so | 90 | * The means for masking individual Baboon interrupts remains a mystery. |
98 | * enable the umbrella interrupt only when no baboon interrupt is disabled. | 91 | * However, since we only use the IDE IRQ, we can just enable/disable all |
92 | * Baboon interrupts. If/when we handle more than one Baboon IRQ, we must | ||
93 | * either figure out how to mask them individually or else implement the | ||
94 | * same workaround that's used for NuBus slots (see nubus_disabled and | ||
95 | * via_nubus_irq_shutdown). | ||
99 | */ | 96 | */ |
100 | 97 | ||
101 | void baboon_irq_enable(int irq) | 98 | void baboon_irq_enable(int irq) |
102 | { | 99 | { |
103 | int irq_idx = IRQ_IDX(irq); | ||
104 | |||
105 | #ifdef DEBUG_IRQUSE | 100 | #ifdef DEBUG_IRQUSE |
106 | printk("baboon_irq_enable(%d)\n", irq); | 101 | printk("baboon_irq_enable(%d)\n", irq); |
107 | #endif | 102 | #endif |
108 | 103 | ||
109 | baboon_disabled &= ~(1 << irq_idx); | 104 | mac_irq_enable(irq_get_irq_data(IRQ_NUBUS_C)); |
110 | if (!baboon_disabled) | ||
111 | mac_irq_enable(irq_get_irq_data(IRQ_NUBUS_C)); | ||
112 | } | 105 | } |
113 | 106 | ||
114 | void baboon_irq_disable(int irq) | 107 | void baboon_irq_disable(int irq) |
115 | { | 108 | { |
116 | int irq_idx = IRQ_IDX(irq); | ||
117 | |||
118 | #ifdef DEBUG_IRQUSE | 109 | #ifdef DEBUG_IRQUSE |
119 | printk("baboon_irq_disable(%d)\n", irq); | 110 | printk("baboon_irq_disable(%d)\n", irq); |
120 | #endif | 111 | #endif |
121 | 112 | ||
122 | baboon_disabled |= 1 << irq_idx; | 113 | mac_irq_disable(irq_get_irq_data(IRQ_NUBUS_C)); |
123 | if (baboon_disabled) | ||
124 | mac_irq_disable(irq_get_irq_data(IRQ_NUBUS_C)); | ||
125 | } | ||
126 | |||
127 | void baboon_irq_clear(int irq) | ||
128 | { | ||
129 | int irq_idx = IRQ_IDX(irq); | ||
130 | |||
131 | baboon->mb_ifr &= ~(1 << irq_idx); | ||
132 | } | ||
133 | |||
134 | int baboon_irq_pending(int irq) | ||
135 | { | ||
136 | int irq_idx = IRQ_IDX(irq); | ||
137 | |||
138 | return baboon->mb_ifr & (1 << irq_idx); | ||
139 | } | 114 | } |