aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/ip2
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/ip2')
-rw-r--r--drivers/char/ip2/ip2main.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/char/ip2/ip2main.c b/drivers/char/ip2/ip2main.c
index 150e1e364ca7..e04e66cf2c68 100644
--- a/drivers/char/ip2/ip2main.c
+++ b/drivers/char/ip2/ip2main.c
@@ -752,7 +752,7 @@ retry:
752 continue; 752 continue;
753 rc = request_irq( ip2config.irq[i], ip2_interrupt, 753 rc = request_irq( ip2config.irq[i], ip2_interrupt,
754 IP2_SA_FLAGS | (ip2config.type[i] == PCI ? IRQF_SHARED : 0), 754 IP2_SA_FLAGS | (ip2config.type[i] == PCI ? IRQF_SHARED : 0),
755 pcName, (void *)&pcName); 755 pcName, i2BoardPtrTable[i]);
756 if (rc) { 756 if (rc) {
757 printk(KERN_ERR "IP2: an request_irq failed: error %d\n",rc); 757 printk(KERN_ERR "IP2: an request_irq failed: error %d\n",rc);
758 ip2config.irq[i] = CIR_POLL; 758 ip2config.irq[i] = CIR_POLL;
@@ -1191,12 +1191,12 @@ ip2_irq_work(i2eBordStrPtr pB)
1191#endif /* USE_IQI */ 1191#endif /* USE_IQI */
1192} 1192}
1193 1193
1194static irqreturn_t 1194static void
1195ip2_interrupt(int irq, void *dev_id) 1195ip2_polled_interrupt(void)
1196{ 1196{
1197 int i; 1197 int i;
1198 i2eBordStrPtr pB; 1198 i2eBordStrPtr pB;
1199 int handled = 0; 1199 const int irq = 0;
1200 1200
1201 ip2trace (ITRC_NO_PORT, ITRC_INTR, 99, 1, irq ); 1201 ip2trace (ITRC_NO_PORT, ITRC_INTR, 99, 1, irq );
1202 1202
@@ -1208,7 +1208,6 @@ ip2_interrupt(int irq, void *dev_id)
1208// IRQ = 0 for polled boards, we won't poll "IRQ" boards 1208// IRQ = 0 for polled boards, we won't poll "IRQ" boards
1209 1209
1210 if ( pB && (pB->i2eUsingIrq == irq) ) { 1210 if ( pB && (pB->i2eUsingIrq == irq) ) {
1211 handled = 1;
1212 ip2_irq_work(pB); 1211 ip2_irq_work(pB);
1213 } 1212 }
1214 } 1213 }
@@ -1216,7 +1215,21 @@ ip2_interrupt(int irq, void *dev_id)
1216 ++irq_counter; 1215 ++irq_counter;
1217 1216
1218 ip2trace (ITRC_NO_PORT, ITRC_INTR, ITRC_RETURN, 0 ); 1217 ip2trace (ITRC_NO_PORT, ITRC_INTR, ITRC_RETURN, 0 );
1219 return IRQ_RETVAL(handled); 1218}
1219
1220static irqreturn_t
1221ip2_interrupt(int irq, void *dev_id)
1222{
1223 i2eBordStrPtr pB = dev_id;
1224
1225 ip2trace (ITRC_NO_PORT, ITRC_INTR, 99, 1, pB->i2eUsingIrq );
1226
1227 ip2_irq_work(pB);
1228
1229 ++irq_counter;
1230
1231 ip2trace (ITRC_NO_PORT, ITRC_INTR, ITRC_RETURN, 0 );
1232 return IRQ_HANDLED;
1220} 1233}
1221 1234
1222/******************************************************************************/ 1235/******************************************************************************/
@@ -1239,7 +1252,7 @@ ip2_poll(unsigned long arg)
1239 // Just polled boards, IRQ = 0 will hit all non-interrupt boards. 1252 // Just polled boards, IRQ = 0 will hit all non-interrupt boards.
1240 // It will NOT poll boards handled by hard interrupts. 1253 // It will NOT poll boards handled by hard interrupts.
1241 // The issue of queued BH interrups is handled in ip2_interrupt(). 1254 // The issue of queued BH interrups is handled in ip2_interrupt().
1242 ip2_interrupt(0, NULL); 1255 ip2_polled_interrupt();
1243 1256
1244 PollTimer.expires = POLL_TIMEOUT; 1257 PollTimer.expires = POLL_TIMEOUT;
1245 add_timer( &PollTimer ); 1258 add_timer( &PollTimer );