summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattf <mattf@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-04-04 22:07:03 +0000
committermattf <mattf@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-04-04 22:07:03 +0000
commit155a71d04637d8bdd00d7f6727a041006ba9dbeb (patch)
treed7efb645de59a6cc53ad6ffc75e253922fdb66b3
parent720527551cd60f2ffe061678aa07819cc55031ce (diff)
Make sure we use the fast kernel bitops that are guarunteed atomic.
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@2394 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rw-r--r--wct4xxp/base.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/wct4xxp/base.c b/wct4xxp/base.c
index 533641c..43c0acb 100644
--- a/wct4xxp/base.c
+++ b/wct4xxp/base.c
@@ -269,9 +269,9 @@ struct t4_span {
int frames_in;
#ifdef VPM_SUPPORT
- unsigned int dtmfactive;
- unsigned int dtmfmask;
- unsigned int dtmfmutemask;
+ unsigned long dtmfactive;
+ unsigned long dtmfmask;
+ unsigned long dtmfmutemask;
short dtmfenergy[31];
short dtmfdigit[31];
#endif
@@ -728,11 +728,11 @@ static void t4_check_vpm450(struct t4 *wc)
if (debug)
printk("Got tone %s of '%c' on channel %d of span %d\n",
(start ? "START" : "STOP"), tone, channel, span + 1);
- if ((wc->tspans[span]->dtmfmask & (1 << channel)) && (tone != 'u')) {
+ if (test_bit(channel, &wc->tspans[span]->dtmfmask) && (tone != 'u')) {
if (start) {
/* The octasic is supposed to mute us, but... Yah, you
guessed it. */
- if (wc->tspans[span]->dtmfmutemask & (1 << channel)) {
+ if (test_bit(channel, &wc->tspans[span]->dtmfmutemask)) {
unsigned long flags;
struct zt_chan *chan = &wc->tspans[span]->span.chans[channel];
int y;
@@ -743,10 +743,10 @@ static void t4_check_vpm450(struct t4 *wc)
}
spin_unlock_irqrestore(&chan->lock, flags);
}
- wc->tspans[span]->dtmfactive |= (1 << channel);
+ set_bit(channel, &wc->tspans[span]->dtmfactive);
zt_qevent_lock(&wc->tspans[span]->span.chans[channel], (ZT_EVENT_DTMFDOWN | tone));
} else {
- wc->tspans[span]->dtmfactive &= ~(1 << channel);
+ clear_bit(channel, &wc->tspans[span]->dtmfactive);
zt_qevent_lock(&wc->tspans[span]->span.chans[channel], (ZT_EVENT_DTMFUP | tone));
}
}
@@ -793,15 +793,15 @@ static void __t4_check_vpm400(struct t4 *wc, unsigned int newio)
energy = ZT_XLAW(energy, ts->chans);
ts->dtmfenergy[base] = energy;
}
- ts->dtmfactive |= (1 << base);
+ set_bit(base, &ts->dtmfactive);
if (ts->dtmfdigit[base]) {
if (ts->dtmfmask & (1 << base))
zt_qevent_lock(&ts->span.chans[base], (ZT_EVENT_DTMFUP | ts->dtmfdigit[base]));
}
ts->dtmfdigit[base] = digit;
- if (ts->dtmfmask & (1 << base))
+ if (test_bit(base, &ts->dtmfmask))
zt_qevent_lock(&ts->span.chans[base], (ZT_EVENT_DTMFDOWN | digit));
- if (ts->dtmfmutemask & (1 << base)) {
+ if (test_bit(base, &ts->dtmfmutemask)) {
/* Mute active receive buffer*/
unsigned long flags;
struct zt_chan *chan = &ts->span.chans[base];
@@ -837,9 +837,9 @@ static void __t4_check_vpm400(struct t4 *wc, unsigned int newio)
if (!wc->t1e1)
base -= 4;
- ts->dtmfactive &= ~(1 << base);
+ clear_bit(base, &ts->dtmfactive);
if (ts->dtmfdigit[base]) {
- if (ts->dtmfmask & (1 << base))
+ if (test_bit(base, &ts->dtmfmask))
zt_qevent_lock(&ts->span.chans[base], (ZT_EVENT_DTMFUP | ts->dtmfdigit[base]));
}
digit = ts->dtmfdigit[base];
@@ -1152,13 +1152,13 @@ static int t4_ioctl(struct zt_chan *chan, unsigned int cmd, unsigned long data)
if (j && (vpmdtmfsupport == 0))
return -ENOSYS;
if (j & ZT_TONEDETECT_ON)
- ts->dtmfmask |= (1 << (chan->chanpos - 1));
+ set_bit(chan->chanpos - 1, &ts->dtmfmask);
else
- ts->dtmfmask &= ~(1 << (chan->chanpos - 1));
+ clear_bit(chan->chanpos - 1, &ts->dtmfmask);
if (j & ZT_TONEDETECT_MUTE)
- ts->dtmfmutemask |= (1 << (chan->chanpos - 1));
+ set_bit(chan->chanpos - 1, &ts->dtmfmutemask);
else
- ts->dtmfmutemask &= ~(1 << (chan->chanpos - 1));
+ clear_bit(chan->chanpos - 1, &ts->dtmfmutemask);
if (wc->vpm450m) {
channel = (chan->chanpos) << 2;
if (!wc->t1e1)
@@ -2165,12 +2165,12 @@ static inline void __receive_span(struct t4_span *ts)
{
#ifdef VPM_SUPPORT
int y;
- unsigned int merged;
+ unsigned long merged;
merged = ts->dtmfactive & ts->dtmfmutemask;
if (merged) {
for (y=0;y<ts->span.channels;y++) {
/* Mute any DTMFs which are supposed to be muted */
- if (merged & (1 << y)) {
+ if (test_bit(y, &merged)) {
memset(ts->span.chans[y].readchunk, ZT_XLAW(0, (ts->span.chans + y)), ZT_CHUNKSIZE);
}
}