From 155a71d04637d8bdd00d7f6727a041006ba9dbeb Mon Sep 17 00:00:00 2001 From: mattf Date: Wed, 4 Apr 2007 22:07:03 +0000 Subject: 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 --- wct4xxp/base.c | 36 ++++++++++++++++++------------------ 1 file 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;yspan.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); } } -- cgit v1.2.3