|
|
@@ -55,6 +55,26 @@ ifxmips_mask_and_ack_irq(unsigned int irq_nr)
|
|
|
}
|
|
|
EXPORT_SYMBOL(ifxmips_mask_and_ack_irq);
|
|
|
|
|
|
+static void
|
|
|
+ifxmips_ack_irq(unsigned int irq_nr)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ u32 *isr = IFXMIPS_ICU_IM0_ISR;
|
|
|
+
|
|
|
+ irq_nr -= INT_NUM_IRQ0;
|
|
|
+ for (i = 0; i <= 4; i++)
|
|
|
+ {
|
|
|
+ if (irq_nr < INT_NUM_IM_OFFSET)
|
|
|
+ {
|
|
|
+ ifxmips_w32((1 << irq_nr), isr);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ isr += IFXMIPS_ICU_OFFSET;
|
|
|
+ irq_nr -= INT_NUM_IM_OFFSET;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
void
|
|
|
ifxmips_enable_irq(unsigned int irq_nr)
|
|
|
{
|
|
|
@@ -96,7 +116,7 @@ ifxmips_irq_type = {
|
|
|
.enable = ifxmips_enable_irq,
|
|
|
.disable = ifxmips_disable_irq,
|
|
|
.unmask = ifxmips_enable_irq,
|
|
|
- .ack = ifxmips_end_irq,
|
|
|
+ .ack = ifxmips_ack_irq,
|
|
|
.mask = ifxmips_disable_irq,
|
|
|
.mask_ack = ifxmips_mask_and_ack_irq,
|
|
|
.end = ifxmips_end_irq,
|