|
@@ -752,7 +752,7 @@ retry:
|
|
|
continue;
|
|
|
rc = request_irq( ip2config.irq[i], ip2_interrupt,
|
|
|
IP2_SA_FLAGS | (ip2config.type[i] == PCI ? IRQF_SHARED : 0),
|
|
|
- pcName, (void *)&pcName);
|
|
|
+ pcName, i2BoardPtrTable[i]);
|
|
|
if (rc) {
|
|
|
printk(KERN_ERR "IP2: an request_irq failed: error %d\n",rc);
|
|
|
ip2config.irq[i] = CIR_POLL;
|
|
@@ -1191,12 +1191,12 @@ ip2_irq_work(i2eBordStrPtr pB)
|
|
|
#endif /* USE_IQI */
|
|
|
}
|
|
|
|
|
|
-static irqreturn_t
|
|
|
-ip2_interrupt(int irq, void *dev_id)
|
|
|
+static void
|
|
|
+ip2_polled_interrupt(void)
|
|
|
{
|
|
|
int i;
|
|
|
i2eBordStrPtr pB;
|
|
|
- int handled = 0;
|
|
|
+ const int irq = 0;
|
|
|
|
|
|
ip2trace (ITRC_NO_PORT, ITRC_INTR, 99, 1, irq );
|
|
|
|
|
@@ -1208,7 +1208,6 @@ ip2_interrupt(int irq, void *dev_id)
|
|
|
// IRQ = 0 for polled boards, we won't poll "IRQ" boards
|
|
|
|
|
|
if ( pB && (pB->i2eUsingIrq == irq) ) {
|
|
|
- handled = 1;
|
|
|
ip2_irq_work(pB);
|
|
|
}
|
|
|
}
|
|
@@ -1216,7 +1215,21 @@ ip2_interrupt(int irq, void *dev_id)
|
|
|
++irq_counter;
|
|
|
|
|
|
ip2trace (ITRC_NO_PORT, ITRC_INTR, ITRC_RETURN, 0 );
|
|
|
- return IRQ_RETVAL(handled);
|
|
|
+}
|
|
|
+
|
|
|
+static irqreturn_t
|
|
|
+ip2_interrupt(int irq, void *dev_id)
|
|
|
+{
|
|
|
+ i2eBordStrPtr pB = dev_id;
|
|
|
+
|
|
|
+ ip2trace (ITRC_NO_PORT, ITRC_INTR, 99, 1, pB->i2eUsingIrq );
|
|
|
+
|
|
|
+ ip2_irq_work(pB);
|
|
|
+
|
|
|
+ ++irq_counter;
|
|
|
+
|
|
|
+ ip2trace (ITRC_NO_PORT, ITRC_INTR, ITRC_RETURN, 0 );
|
|
|
+ return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
/******************************************************************************/
|
|
@@ -1239,7 +1252,7 @@ ip2_poll(unsigned long arg)
|
|
|
// Just polled boards, IRQ = 0 will hit all non-interrupt boards.
|
|
|
// It will NOT poll boards handled by hard interrupts.
|
|
|
// The issue of queued BH interrups is handled in ip2_interrupt().
|
|
|
- ip2_interrupt(0, NULL);
|
|
|
+ ip2_polled_interrupt();
|
|
|
|
|
|
PollTimer.expires = POLL_TIMEOUT;
|
|
|
add_timer( &PollTimer );
|