]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/m68k/mac/psc.c
Merge branches 'x86/urgent', 'x86/amd-iommu', 'x86/apic', 'x86/cleanups', 'x86/core...
[karo-tx-linux.git] / arch / m68k / mac / psc.c
index 15378a5878c94925f1cf88cb2556b58ee150ad14..f84a4dd64f94be9788bbea2affed886ef4e78b3f 100644 (file)
@@ -36,7 +36,7 @@ irqreturn_t psc_irq(int, void *);
  * Debugging dump, used in various places to see what's going on.
  */
 
-void psc_debug_dump(void)
+static void psc_debug_dump(void)
 {
        int     i;
 
@@ -55,7 +55,7 @@ void psc_debug_dump(void)
  * expanded to cover what I think are the other 7 channels.
  */
 
-void psc_dma_die_die_die(void)
+static void psc_dma_die_die_die(void)
 {
        int i;
 
@@ -131,11 +131,8 @@ irqreturn_t psc_irq(int irq, void *dev_id)
 {
        int pIFR        = pIFRbase + ((int) dev_id);
        int pIER        = pIERbase + ((int) dev_id);
-       int base_irq;
-       int irq_bit,i;
-       unsigned char events;
-
-       base_irq = irq << 3;
+       int irq_num;
+       unsigned char irq_bit, events;
 
 #ifdef DEBUG_IRQS
        printk("psc_irq: irq %d pIFR = 0x%02X pIER = 0x%02X\n",
@@ -146,14 +143,16 @@ irqreturn_t psc_irq(int irq, void *dev_id)
        if (!events)
                return IRQ_NONE;
 
-       for (i = 0, irq_bit = 1 ; i < 4 ; i++, irq_bit <<= 1) {
-               if (events & irq_bit) {
-                       psc_write_byte(pIER, irq_bit);
-                       m68k_handle_int(base_irq + i);
+       irq_num = irq << 3;
+       irq_bit = 1;
+       do {
+               if (events & irq_bit) {
                        psc_write_byte(pIFR, irq_bit);
-                       psc_write_byte(pIER, irq_bit | 0x80);
+                       m68k_handle_int(irq_num);
                }
-       }
+               irq_num++;
+               irq_bit <<= 1;
+       } while (events >= irq_bit);
        return IRQ_HANDLED;
 }