summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattf <mattf@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-01-23 21:52:46 +0000
committermattf <mattf@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-01-23 21:52:46 +0000
commitc40b2fa593ad65f7d553e021aad46fac890a03d6 (patch)
tree7c9864862955e68ad2b1564383817755806e8d40
parentf82bdb58274b9d229bffce895b3385f86be29428 (diff)
Merged revisions 1937 via svnmerge from
https://origsvn.digium.com/svn/zaptel/branches/1.4 ................ r1937 | mattf | 2007-01-23 15:49:15 -0600 (Tue, 23 Jan 2007) | 11 lines Merged revisions 1936 via svnmerge from https://origsvn.digium.com/svn/zaptel/branches/1.2 ........ r1936 | mattf | 2007-01-23 15:28:14 -0600 (Tue, 23 Jan 2007) | 3 lines Make sure we don't clear the interrupt before we might have received it in shared interrupt line scenarios. ........ ................ git-svn-id: http://svn.digium.com/svn/zaptel/trunk@1938 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rw-r--r--wct1xxp.c4
-rw-r--r--wctdm.c3
-rw-r--r--wctdm24xxp.c4
-rw-r--r--wcte11xp.c4
4 files changed, 9 insertions, 6 deletions
diff --git a/wct1xxp.c b/wct1xxp.c
index 201292a..a637e26 100644
--- a/wct1xxp.c
+++ b/wct1xxp.c
@@ -1134,8 +1134,6 @@ ZAP_IRQ_HANDLER(t1xxp_interrupt)
int x;
ints = inb(wc->ioaddr + WC_INTSTAT);
- outb(ints, wc->ioaddr + WC_INTSTAT);
-
if (!ints)
#ifdef LINUX26
return IRQ_NONE;
@@ -1143,6 +1141,8 @@ ZAP_IRQ_HANDLER(t1xxp_interrupt)
return;
#endif
+ outb(ints, wc->ioaddr + WC_INTSTAT);
+
if (!wc->intcount) {
if (debug) printk("Got interrupt: 0x%04x\n", ints);
}
diff --git a/wctdm.c b/wctdm.c
index c8afeb8..436f404 100644
--- a/wctdm.c
+++ b/wctdm.c
@@ -1037,7 +1037,6 @@ ZAP_IRQ_HANDLER(wctdm_interrupt)
int mode;
ints = inb(wc->ioaddr + WC_INTSTAT);
- outb(ints, wc->ioaddr + WC_INTSTAT);
if (!ints)
#ifdef LINUX26
@@ -1046,6 +1045,8 @@ ZAP_IRQ_HANDLER(wctdm_interrupt)
return;
#endif
+ outb(ints, wc->ioaddr + WC_INTSTAT);
+
if (ints & 0x10) {
/* Stop DMA, wait for watchdog */
printk("TDM PCI Master abort\n");
diff --git a/wctdm24xxp.c b/wctdm24xxp.c
index 49ad8b6..031f139 100644
--- a/wctdm24xxp.c
+++ b/wctdm24xxp.c
@@ -1559,7 +1559,6 @@ ZAP_IRQ_HANDLER(wctdm_interrupt)
/* Read and clear interrupts */
ints = wctdm_getctl(wc, 0x0028);
- wctdm_setctl(wc, 0x0028, ints);
if (!ints)
#ifdef LINUX26
@@ -1567,6 +1566,9 @@ ZAP_IRQ_HANDLER(wctdm_interrupt)
#else
return;
#endif
+
+ wctdm_setctl(wc, 0x0028, ints);
+
ints &= wc->intmask;
if (ints & 0x00000041) {
do {
diff --git a/wcte11xp.c b/wcte11xp.c
index 7d2850d..78537ed 100644
--- a/wcte11xp.c
+++ b/wcte11xp.c
@@ -1289,8 +1289,6 @@ ZAP_IRQ_HANDLER(t1xxp_interrupt)
int x;
ints = inb(wc->ioaddr + WC_INTSTAT);
- outb(ints, wc->ioaddr + WC_INTSTAT);
-
if (!ints)
#ifdef LINUX26
return IRQ_NONE;
@@ -1298,6 +1296,8 @@ ZAP_IRQ_HANDLER(t1xxp_interrupt)
return;
#endif
+ outb(ints, wc->ioaddr + WC_INTSTAT);
+
if (!wc->intcount) {
if (debug) printk("Got interrupt: 0x%04x\n", ints);
}